Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"svelte",
"highlight-js",
"highlight",
"code",
"syntax",
"syntax-highlighting",
"svelte-component",
"typescript"
],
"is_fork": false,
"size_kb": 9610,
"has_wiki": false,
"homepage": "https://svhe.onrender.com",
"languages": {
"CSS": 2164,
"HTML": 2038,
"Astro": 14118,
"Svelte": 253790,
"JavaScript": 295552,
"TypeScript": 561046
},
"pushed_at": "2026-07-23T14:47:19Z",
"created_at": "2019-11-09T22:15:10Z",
"owner_type": "User",
"updated_at": "2026-07-23T14:49:03Z",
"description": "Syntax Highlighting for Svelte using highlight.js",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"JavaScript",
"Svelte"
]
},
"owner": {
"blog": null,
"name": "Eric Liu",
"type": "User",
"login": "metonym",
"company": "@renderinc ",
"location": "San Francisco, CA",
"followers": 294,
"avatar_url": "https://avatars.githubusercontent.com/u/10718366?v=4",
"created_at": "2015-01-27T02:09:21Z",
"is_verified": null,
"public_repos": 161,
"account_age_days": 4197
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v7.16.0",
"kind": "minor",
"published_at": "2026-07-19T22:24:49Z"
},
{
"tag": "v7.15.0",
"kind": "minor",
"published_at": "2026-07-11T04:16:19Z"
},
{
"tag": "v7.14.1",
"kind": "patch",
"published_at": "2026-07-07T02:11:55Z"
},
{
"tag": "v7.14.0",
"kind": "minor",
"published_at": "2026-07-03T00:16:17Z"
},
{
"tag": "v7.13.0",
"kind": "minor",
"published_at": "2026-06-27T04:05:00Z"
},
{
"tag": "v7.12.0",
"kind": "minor",
"published_at": "2026-06-23T16:12:10Z"
},
{
"tag": "v7.11.0",
"kind": "minor",
"published_at": "2026-06-07T21:29:06Z"
},
{
"tag": "v7.10.1",
"kind": "patch",
"published_at": "2026-06-03T01:47:40Z"
},
{
"tag": "v7.10.0",
"kind": "minor",
"published_at": "2026-06-02T17:38:13Z"
},
{
"tag": "v7.9.0",
"kind": "minor",
"published_at": "2025-10-22T02:56:08Z"
},
{
"tag": "v7.8.4",
"kind": "patch",
"published_at": "2025-08-31T18:55:10Z"
},
{
"tag": "v7.8.3",
"kind": "patch",
"published_at": "2025-04-01T20:05:46Z"
},
{
"tag": "v7.8.2",
"kind": "patch",
"published_at": "2024-12-28T02:44:15Z"
},
{
"tag": "v7.8.1",
"kind": "patch",
"published_at": "2024-12-25T21:23:57Z"
},
{
"tag": "v7.8.0",
"kind": "minor",
"published_at": "2024-12-15T21:35:55Z"
},
{
"tag": "v7.7.0",
"kind": "minor",
"published_at": "2024-07-15T15:52:28Z"
},
{
"tag": "v7.6.1",
"kind": "patch",
"published_at": "2024-05-16T02:49:43Z"
},
{
"tag": "v7.6.0",
"kind": "minor",
"published_at": "2024-02-06T06:07:10Z"
},
{
"tag": "v7.5.0",
"kind": "minor",
"published_at": "2024-02-02T04:56:29Z"
},
{
"tag": "v7.4.8",
"kind": "patch",
"published_at": "2024-01-05T05:20:07Z"
},
{
"tag": "v7.4.7",
"kind": "patch",
"published_at": "2023-12-28T18:10:36Z"
},
{
"tag": "v7.4.6",
"kind": "patch",
"published_at": "2023-12-17T00:57:41Z"
},
{
"tag": "v7.4.5",
"kind": "patch",
"published_at": "2023-12-17T00:43:53Z"
},
{
"tag": "v7.4.4",
"kind": "patch",
"published_at": "2023-12-17T00:43:42Z"
},
{
"tag": "v7.4.3",
"kind": "patch",
"published_at": "2023-12-16T19:00:46Z"
},
{
"tag": "v7.4.2",
"kind": "patch",
"published_at": "2023-11-25T16:46:59Z"
},
{
"tag": "v7.4.1",
"kind": "patch",
"published_at": "2023-10-13T15:51:20Z"
},
{
"tag": "v7.4.0",
"kind": "minor",
"published_at": "2023-10-13T15:47:14Z"
},
{
"tag": "v7.3.0",
"kind": "minor",
"published_at": "2023-05-13T17:40:42Z"
},
{
"tag": "v7.2.1",
"kind": "patch",
"published_at": "2023-04-01T17:43:54Z"
},
{
"tag": "v7.2.0",
"kind": "minor",
"published_at": "2023-02-14T23:11:52Z"
},
{
"tag": "v7.1.2",
"kind": "patch",
"published_at": "2023-01-01T20:05:02Z"
},
{
"tag": "v7.1.1",
"kind": "patch",
"published_at": "2023-01-01T02:52:15Z"
},
{
"tag": "v7.0.1",
"kind": "patch",
"published_at": "2022-12-30T21:27:31Z"
},
{
"tag": "v7.0.0",
"kind": "major",
"published_at": "2022-12-30T21:27:07Z"
},
{
"tag": "v6.2.1",
"kind": "patch",
"published_at": "2022-08-07T17:01:27Z"
},
{
"tag": "v6.2.0",
"kind": "minor",
"published_at": "2022-07-13T15:35:06Z"
},
{
"tag": "v6.1.2",
"kind": "patch",
"published_at": "2022-07-02T15:54:20Z"
},
{
"tag": "v6.1.1",
"kind": "patch",
"published_at": "2022-06-27T12:22:04Z"
},
{
"tag": "v6.1.0",
"kind": "minor",
"published_at": "2022-06-10T14:44:12Z"
},
{
"tag": "v6.0.1",
"kind": "patch",
"published_at": "2022-03-26T17:23:19Z"
},
{
"tag": "v6.0.0",
"kind": "major",
"published_at": "2022-03-26T17:23:01Z"
},
{
"tag": "v5.3.2",
"kind": "patch",
"published_at": "2022-03-17T03:05:49Z"
},
{
"tag": "v5.3.1",
"kind": "patch",
"published_at": "2022-03-17T02:40:15Z"
},
{
"tag": "v5.3.0",
"kind": "minor",
"published_at": "2022-03-12T17:05:23Z"
},
{
"tag": "v5.2.2",
"kind": "patch",
"published_at": "2022-02-25T15:20:35Z"
},
{
"tag": "v5.2.1",
"kind": "patch",
"published_at": "2022-02-12T00:38:21Z"
},
{
"tag": "v5.2.0",
"kind": "minor",
"published_at": "2022-01-06T16:12:11Z"
},
{
"tag": "v5.1.4",
"kind": "patch",
"published_at": "2021-12-18T15:12:57Z"
},
{
"tag": "v5.1.3",
"kind": "patch",
"published_at": "2021-11-13T23:14:36Z"
},
{
"tag": "v5.1.2",
"kind": "patch",
"published_at": "2021-10-19T16:01:32Z"
},
{
"tag": "v5.1.1",
"kind": "patch",
"published_at": "2021-10-19T15:48:39Z"
},
{
"tag": "v5.1.0",
"kind": "minor",
"published_at": "2021-10-17T14:30:49Z"
},
{
"tag": "v5.0.0",
"kind": "major",
"published_at": "2021-10-08T23:05:09Z"
},
{
"tag": "v4.0.0",
"kind": "major",
"published_at": "2021-09-16T19:08:54Z"
},
{
"tag": "v3.4.0",
"kind": "minor",
"published_at": "2021-09-12T22:35:37Z"
},
{
"tag": "v3.3.0",
"kind": "minor",
"published_at": "2021-09-01T16:17:17Z"
},
{
"tag": "v3.2.1",
"kind": "patch",
"published_at": "2021-09-01T16:17:42Z"
},
{
"tag": "v3.2.0",
"kind": "minor",
"published_at": "2021-08-02T13:23:58Z"
},
{
"tag": "v3.1.0",
"kind": "minor",
"published_at": "2021-07-08T15:21:28Z"
},
{
"tag": "v3.0.0",
"kind": "major",
"published_at": "2021-05-30T12:51:56Z"
},
{
"tag": "v2.1.0",
"kind": "minor",
"published_at": "2021-05-21T22:09:27Z"
},
{
"tag": "v2.0.0",
"kind": "major",
"published_at": "2021-04-30T21:28:35Z"
},
{
"tag": "v2.0.0-rc.1",
"kind": "prerelease",
"published_at": "2021-04-30T21:28:52Z"
},
{
"tag": "v2.0.0-rc.0",
"kind": "prerelease",
"published_at": "2021-04-30T21:29:04Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2021-04-23T22:12:32Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2021-04-23T21:12:16Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2021-02-13T22:54:57Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2021-02-13T22:24:56Z"
}
],
"recent_commits": [
{
"oid": "e4f6958d0fdff1aeb0c2f42b5b28c80e64e4d18b",
"body": null,
"is_bot": false,
"headline": "chore(deps-dev): patch Biome to 2.5.5 (#472)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-23T14:47:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "673a5ba7ac86e676eef645b593ef8165f768bf3a",
"body": null,
"is_bot": false,
"headline": "docs: fix example formatting",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:37:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "654cf50c8ede26e5bf65019e60d9871de0a77c3a",
"body": null,
"is_bot": false,
"headline": "chore(examples): bump deps",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:29:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6bda2e385b7a257acc0adefc98b69e6313d6687b",
"body": null,
"is_bot": false,
"headline": "chore(deps-dev): bump deps",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:28:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "768e2ecf7014ff2a127573dca880ca547f64177f",
"body": null,
"is_bot": false,
"headline": "v7.16.0",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:23:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4d697e0cb15e521694c248640a1315ba7467c15",
"body": null,
"is_bot": false,
"headline": "test(languages): bump supported language count to 247",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9deea5ca5043e432edaff87fb80a85e1e887e33e",
"body": null,
"is_bot": false,
"headline": "docs(preview): add sparql language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26e4225ddc9968e7140b6fc38efca7eb9865336f",
"body": null,
"is_bot": false,
"headline": "feat(languages): add custom `sparql` language",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b669b5c54ef0a50cb55936b7dc71263eb844614",
"body": null,
"is_bot": false,
"headline": "docs(preview): add heex language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79c40801af1dc40176ca33d2027d792de9b35112",
"body": null,
"is_bot": false,
"headline": "feat(languages): add custom `heex` language",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc113b3719617c46563d8f9eca10cf461a76d82e",
"body": null,
"is_bot": false,
"headline": "docs(preview): add gdscript language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8aa6b1e4eb157e13f473e895e4a730e728b63008",
"body": null,
"is_bot": false,
"headline": "feat(languages): add custom `gdscript` language",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T22:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "357039484c7184a7ff40f2040e481b162cd31b16",
"body": "…tion\n\nThe top-level declaration matcher (model/enum/type/view/datasource/\ngenerator + name) had no line-start anchor, so an ordinary field named\n\"type\" (a common discriminator/field name) followed by its own type,\ne.g. `type String` inside a model body, matched the exact same\nshape as a real `typ\n[…]\ne\nsynthetic keyword-list sample puts every keyword on one line with no\nindentation, so only the first pair still triggers the anchored\nmatcher; the rest correctly fall back to plain keyword coloring).",
"is_bot": false,
"headline": "fix(languages): don't mistake a prisma field named type for a declara…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "882f6b3ea39dcd4f4afc24234f6a17f723aaf538",
"body": "The inline JSX tag's end pattern matched the first > anywhere,\nincluding one from a JS comparison inside a brace attribute\nexpression (highlight={value > threshold}), closing the tag\nmid-attribute and leaving the real closing /> to fall outside it.\n\nNarrowly scoped fix: only intervene for a {...} th\n[…]\ng/attr/string styling. An earlier\nattempt that intercepted every {...} unconditionally fixed the bug but\nregressed that common case by fragmenting the surrounding tag into\ndisconnected HTML fragments.",
"is_bot": false,
"headline": "fix(languages): keep mdx JSX tags open through a > inside {...}",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b5e9cd7c430a415aa8e60c2ee7f36d62ad19db2c",
"body": "DURATION only allowed a single number+unit segment, so compound\nPrometheus-style durations like [1h30m] in\nrate({job=\"x\"}[1h30m]) didn't match as a duration token at all.\nRepeat the number+unit segment to allow more than one.",
"is_bot": false,
"headline": "fix(languages): highlight compound logql durations",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e50e7e62877c2ec9785a0677f213860af0a88df",
"body": "beginKeywords listed \"def\" before \"def-env\"; regex alternation tries\nalternatives in order and isn't longest-match, so \"def-env myFunction\"\nmatched only \"def\", leaving \"-env\" unconsumed to be swallowed by the\nnested title regex (which allows hyphens) as if it were part of the\nfunction name. List the longer alternative first.",
"is_bot": false,
"headline": "fix(languages): stop nushell def-env from corrupting the title match",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ddfe89394bbe7a4cece29ab943c2808c4792413",
"body": "SITE_ADDRESS required the whole line to be a single address token\nfollowed by `{`, so common multi-address headers like\n`example.com www.example.com {` got no attr styling at all -- the\nlookahead failed right after the first address. Repeat the address\ntoken to allow more than one.\n\nAnchored the who\n[…]\n\nunindented) to avoid a regression: the address-token class allows\nbare words, so without that anchor the repeating group also matched\nan indented directive-with-argument line like `transport http {`.",
"is_bot": false,
"headline": "fix(languages): highlight caddy multi-address site headers",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "88acf74a8573ab4dd1cba12d22eda6117093e213",
"body": "The \"meta\" rule for the closing --- fence could never fire: the\nfrontmatter mode's own end (with excludeEnd: true) already consumed\nthat line to close the TypeScript sub-block, advancing past it before\nthe sibling rule ever got a chance to see it -- dead code. Switch to\nreturnEnd so the fence text i\n[…]\nof-document alternative, mirroring the frontmatter\nmode's own end pattern.\n\nGraduates astro out of the auto-detection KNOWN_AUTO_DETECT_GAPS list:\nthe added relevance now wins full-corpus auto-detect.",
"is_bot": false,
"headline": "fix(languages): style astro's closing frontmatter fence",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "be19bf3783574be1050ea382dfcc98574eab30c8",
"body": "RECIPE_HEADER's default-value alternation only allowed a quoted\nstring or a bare identifier, not a function call, e.g.\nserve port=env_var_or_default(\"PORT\", \"8080\"):. The whole header\nlookahead failed at the unhandled `(`, so the recipe name and every\nparameter lost their title/params styling entirely.",
"is_bot": false,
"headline": "fix(languages): recognize just recipe params with function-call defaults",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e663d9f99f40a45ddd3796aa10d9202367978b06",
"body": "SCRIPT_BLOCK's body had a bare `end: /\\}/` with no brace balancing, so\nany nested `{}` in the JS body (e.g. an if statement) closed the mode\nat the inner block's own closing brace, leaving the true closing\nbrace and anything after it to fall through to top-level parsing.\nAdd a nested balancer -- repeating `subLanguage: \"javascript\"` on it,\nsince a nested `contains` mode doesn't inherit the parent's\nsubLanguage.",
"is_bot": false,
"headline": "fix(languages): balance nested braces in templ legacy script blocks",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcf10d587c53014ccf7b4958a0e834990317559f",
"body": "CODE_MODE's lookahead required a letter/underscore right after `#`,\nso the common bare code-block idiom #{ let x = 5 } (no leading\nkeyword or function call before the brace) was never recognized as\ncode at all -- everything inside stayed unhighlighted. Also allow a\nbare `{`/`(`/`[` to follow `#`.",
"is_bot": false,
"headline": "fix(languages): recognize bare typst #{ } code blocks",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c5dbb0098c5d3e5f7231e581d04c226e03cb6a64",
"body": "STRONG/EMPHASIS's `end` patterns were `(?!\\s)\\*` / `(?!\\s)_` -- a\nno-op, since the lookahead and the literal both anchor to the same\nposition and the delimiter itself is never whitespace, so it always\npassed regardless of what preceded it. Typst's actual rule (\"word*\"\ncloses, \"word *\" doesn't) depends on the preceding character, which\nlookbehind can't check here, so require that character as part of the\nmatch itself instead.",
"is_bot": false,
"headline": "fix(languages): make typst strong/emphasis respect the whitespace rule",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4199e036a26875243f62328d7237c4f3756c9ec",
"body": "SEMANTIC fired on any `: identifier`, misfiring on ternary\nexpressions (`cond ? a : b`) and switch/case labels. Without deeper\nparsing there's no structural way to tell those colons apart from a\nreal semantic, so lean on an actual HLSL convention instead: semantics\nare always ALL_CAPS (POSITION, TEXCOORD0, SV_TARGET, ...), while\nternary/case values are ordinary identifiers.",
"is_bot": false,
"headline": "fix(languages): stop hlsl semantics matching ternary/switch colons",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd46ac0c332ed84fc719871e8573be01a869bae8",
"body": "ATTRIBUTE required a parenthesized argument list, so parameterless\nattributes -- [unroll], [loop], [branch], [flatten],\n[earlydepthstencil] -- never matched at all. Make the arg list\noptional.",
"is_bot": false,
"headline": "fix(languages): highlight parameterless hlsl attributes",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63a5ee56c34cfef0ac1eeaa3ffd02897d509d20d",
"body": "storeSubscriptionPattern's identifier class was [\\w-]*, but JS/TS\nidentifiers can't contain a hyphen. {$count-1} (no surrounding spaces)\nmatched \"$count-1\" as a single variable token instead of $count, -, 1.\nUse \\w* for the name, matching real identifier syntax.",
"is_bot": false,
"headline": "fix(languages): don't swallow a trailing hyphen into svelte stores",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e0cb729b6ca1f22cc99dc92059239dc37ee6464",
"body": "NUMBER's hex variant lacked `_` in its digit class, so a digit-\nseparated hex literal like 0x1234_5678 only matched up through\n\"0x1234\" -- and even that partial match failed the trailing \\b\n(underscore is a word character, so there's no boundary), leaving the\nwhole literal unhighlighted.",
"is_bot": false,
"headline": "fix(languages): highlight solidity hex literals with underscores",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "972e7f1c38cd75a58fecf4e11bc8c92a714dc917",
"body": "The contract/interface/library header's nested `title` matcher had no\nrestriction, so it kept re-firing for every identifier in\n`contract Foo is Ownable, ReentrancyGuard {` -- tagging `is` and every\ninherited contract name as `title` too. Bound the match to just the\ndeclaration's own name (keyword +\n[…]\n\nsnapshot for the resulting soft-gate diff (the synthetic keyword-list\nsample has no `{` at all, so the mode never closes there either, but\nthe blast radius is now just the one word after \"contract\").",
"is_bot": false,
"headline": "fix(languages): don't tag solidity inheritance lists as titles",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "87870034171d8dfec964a0b0f3c4d12b24e3c6f3",
"body": "LABEL's bare `:identifier` pattern collides with map-literal syntax\nwhenever a value is itself an identifier expression, e.g.\n`{name: n.name}` -- `:n` got misdetected as a node label. Give map\nliterals their own scoped mode (keyed by a new MAP_KEY for the\n`key:` side) instead of trying to exclude this with LABEL's own\npattern, since LABEL is legitimately reused for node-label chains\n(`(n:Person:Employee)`) where the same \"preceded by a word char\"\nheuristic can't distinguish the two cases.",
"is_bot": false,
"headline": "fix(languages): don't mistake cypher map values for node labels",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78dc9a3712cba2aacf70ebe60fba36078dd8196b",
"body": "RECORD_FIELD fires on any `identifier = value` sequence, which is\nidentical surface syntax to a `let` binding -- `let x = 5 in x + 1`\nrendered `x` as an attr (record-field) exactly as if it were `{ x = 5 }`.\nAdd a LET_BINDING mode that matches `let` together with the bound\nname; since its match star\n[…]\nical as real Nickel, which\nalways names a binding), so LET_BINDING's bounded match captures \"in\"\nas if it were the bound name there -- harmless for real code, but a\nsoft-gate diff worth acknowledging.",
"is_bot": false,
"headline": "fix(languages): don't mistag nickel let-bound names as record fields",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b41bb10bf1c49b592597687141b466970ef1a9bb",
"body": "METRIC's negative lookahead only excludes recognized keywords/\naggregators/functions, so bare identifiers inside a by(...)/\nwithout(...) grouping clause (e.g. `sum by (job, instance) (up)`)\nfell through to METRIC and got tagged as metric names instead of\ngrouping labels. Add a dedicated GROUPING_LAB\n[…]\ns duration variant stopped at the range part.\nExtend that variant to consume the optional `:resolution` (which may\nitself be a bare `:` with the resolution omitted) as part of the same\nduration token.",
"is_bot": false,
"headline": "fix(languages): fix promql grouping labels and subquery resolution",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "86c6df672cc1c681f4c7ba7371b2409306f1c8b6",
"body": "Two related bugs: BUILT_IN_CALL matched any call-like identifier\nfollowed by \"(\", so user-defined rules like is_valid_user(u) got\ntagged as built_in both at their definition and every call site,\nmisleadingly implying they're language builtins. Restrict it to an\nalternation of the actual REGO_BUILTIN\n[…]\n (function-style rules), so\nis_valid_user(u) { was never recognized as a rule definition at all --\nit fell through entirely to the now-fixed BUILT_IN_CALL. Extend the\nlookahead to also accept `(...)`.",
"is_bot": false,
"headline": "fix(languages): recognize rego function-style rule heads",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "efab4e9b91bf517cc2803a496106f2601506f4ed",
"body": "STRING's variants had no contains at all, so an escaped quote inside\nan echo (e.g. {{ \"Say \\\"hi\\\" to me\" }}) matched the string's own end\npattern and terminated it early -- splitting one string into two\nmismatched spans around the stray backslashes. Add\nhljs.BACKSLASH_ESCAPE, matching what hljs.QUOTE_STRING_MODE already\ndoes (this was a from-scratch reimplementation that dropped it).",
"is_bot": false,
"headline": "fix(languages): handle escaped quotes in blade strings",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b239a858c6b819f34168f14bee0e46717cf5bc7e",
"body": "DIRECTIVE's regex (@[a-zA-Z]\\w*) had no boundary check, so any\nword@word sequence -- most commonly an email address in markup text,\ne.g. foo@example.com -- got its domain misdetected as a directive.\nLookbehind isn't an option, so the preceding character is captured\nand consumed (left unstyled) inste\n[…]\nently disabling the PHP subLanguage\nembedding. Refreshes the golden snapshot for blade's now-cosmetically\ndifferent (but equally correct) span boundary around the sample's\n\"#hashtag @annotation\" case.",
"is_bot": false,
"headline": "fix(languages): don't mistake email addresses for blade directives",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ffa164c717aa39336d337a8365d8c86b67c5ff7d",
"body": "markoControlFlow matched \"else if\" (space), but Marko's actual tag is\nelse-if (hyphen). The regex still fired on the \"else\" prefix (\\b holds\nat the hyphen), leaving \"-if(...)\" outside the keyword span -- a\npartial-match bug, not a total miss.",
"is_bot": false,
"headline": "fix(languages): recognize marko's else-if hyphen form",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "71696e4a2b940e1ab309b37f4ed80e23a944658c",
"body": "The concise-tag lookahead's tag-name char class had no room for `.`\nor `#`, so a line like `div.container` -- Marko's class/id shorthand,\nused constantly in concise mode -- never matched the lookahead at all\nand got no tag/name highlighting whatsoever. Share a single\nMARKO_TAG_NAME pattern (base name + repeated .class/#id segments)\nbetween the outer lookahead and the inner name matcher.",
"is_bot": false,
"headline": "fix(languages): recognize marko concise class/id shorthand on tags",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0e67c543e8d1da6d17750ba7ca395692936128e",
"body": "Only the explicit @{ }/@code { }/@functions { } forms were wired up to\nC# tokenization. Implicit blocks -- @if (...) { }, @foreach (...) { },\n@for, @while, @switch, @else -- are Razor's single most common way to\nmix control flow with markup, but got zero C# handling: the keyword,\ncondition, and body\n[…]\nan implicit block's body mixes HTML tags and @expressions with\nC#, so it needs TAG/EXPRESSION handling, not just CSHARP_BODY_CONTAINS).\nAlso add `in` to the C# keyword list, used by every foreach/for.",
"is_bot": false,
"headline": "fix(languages): recognize razor implicit control-flow blocks",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00b228223741e4acbbf0fc3584a2d173c86cc7c6",
"body": "The previous fix (993f8e2) changed the fn mode's `end` to `/\\(/`, but\nan open-ended forward search for `(` risks scanning to the end of the\ndocument if a `(` never follows (e.g. malformed/partial input) --\ncaught by the golden-snapshot test, which feeds each grammar's own\nkeyword list back as a sing\n[…]\no\nopen-ended scan at all.\n\nAlso refreshes the golden snapshot for pug (98f4a7e's control-flow\nkeyword fix changed its output but the snapshot wasn't updated) and\nzig (this commit's own output change).",
"is_bot": false,
"headline": "fix(languages): bound zig fn-name match to avoid runaway scan",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "66554d11961ee9110a9e92a9d3139be730a86762",
"body": "The generic line-start tag-shorthand rule matched any line beginning\nwith a letter, including if/else/each/case/when/etc, before the\ntop-level keyword scanner got a chance -- so Pug's core control-flow\nkeywords rendered as selector-tag (as if they were HTML tag names).\nAdd a dedicated keyword rule for PUG_KEYWORDS ahead of the tag rule so\nit wins the tie at line start.",
"is_bot": false,
"headline": "fix(languages): don't shadow pug control-flow keywords with tag rule",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4ed905500a11f83a75b14531fd969291fd419c0",
"body": "NUMBER's decimal variants used a [ifh]? suffix class, omitting `u`.\nSince a digit immediately followed by `u` has no word boundary to\nsatisfy the trailing \\b, the whole match failed -- WGSL's ubiquitous\nunsigned-int suffix (42u, 0u) never highlighted as a number at all.",
"is_bot": false,
"headline": "fix(languages): highlight wgsl unsigned-integer number suffix",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25da324b0d8238efa29cac33e0cd3749d448686d",
"body": "The `fn` mode ended on `end: /[(\\s]/`, which matched the space right\nafter `fn` (Zig always writes `fn add(...)` with a space before the\nname) before the nested title-matcher ever got to run. Function names\nwere never highlighted in any real Zig code. Wait for the opening\nparen instead so the name in between gets a chance to match.",
"is_bot": false,
"headline": "fix(languages): highlight zig function names",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d77d902e378586be9204ce50b51d72923546d74",
"body": "vueDirective's lookahead required =, whitespace, or > immediately after\nthe directive name, so longhand directives with an explicit argument\n(v-bind:href, v-on:click, v-slot:name) never matched at all -- the\ncolon broke the lookahead before it could succeed. Extend the regex to\noptionally consume :arg or the dynamic-argument form :[key].",
"is_bot": false,
"headline": "fix(languages): recognize vue longhand directive arguments",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a48a978c8948bcb28c7844fa7e2f1bb58aac5e96",
"body": "hcl, nickel, nushell, pkl, and jq all close their `${...}`/`%{...}`/`\\(...)`\ninterpolation modes on the first matching `}`/`)`, so any interpolation\ncontaining a nested call or bare object/record literal with the same\nclosing character ends prematurely (e.g. hcl's\n`${merge(local.tags, { Name = \"x\" }\n[…]\ned the\ngeneric `hljs.BACKSLASH_ESCAPE` (`\\<anything>`) before the more specific\n`\\(` interpolation start, so the escape mode always won the tie and\ninterpolation never fired at all in either language.",
"is_bot": false,
"headline": "fix(languages): balance nested delimiters in string interpolation",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T21:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "071f402cacbd1e66dfc7a14ae01621a2ae2a4f2f",
"body": null,
"is_bot": false,
"headline": "chore(deps-dev): upgrade @biomejs/biome to 2.5.4 (#469)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-19T19:31:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a7ae87e1b0cb318816cd16cd4c22ba1c0d0f4f4",
"body": "Interactive showcase at /preview-define-theme: role-color swatches\ndrive a live defineTheme() palette, a toggle switches to an\nextendTheme(atomOneDark, ...) variant, and both render through\nHighlightStyle. Not linked from the top nav or any listing page\n(mirrors every other /preview-* route in this \n[…]\n only registered\nin Header's hiddenRoutes so it gets a proper page heading.\n\nAlso runs the project's import-ordering assist (fix:imports) over a\nfew theme-related files whose import order had drifted.",
"is_bot": false,
"headline": "docs(www): add an unlisted defineTheme/extendTheme preview page",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-12T03:20:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "25a6ab17f7e1119f593e15e5c5f0430d98213df1",
"body": "Programmatic theme authoring on top of the ThemePalette format:\n\n- defineTheme(): build a complete palette from ~14 semantic roles\n (comment, keyword, string, function, type, ...) plus optional\n per-scope overrides; roles expand to hljs scope variables via a\n documented mapping table\n- extendThem\n[…]\nanged)\n- a build-time report measures how much of each shipped theme the\n role layer alone reconstructs, keeping the mapping honest\n\nAdditive only: no changes to components, shipped palettes, or CSS.",
"is_bot": false,
"headline": "feat(theme): add defineTheme, extendTheme, and a TextMate importer",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-12T03:20:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8f9c95c247881fbb9269025033016edb80e85537",
"body": "Both failures on PR #466's e2e-tests job were races in the test\nassertions themselves, not in the components under test:\n\n- The HighlightStream chunk-growth check read `stream`'s text once\n after `highlightCount` had already updated, assuming both DOM\n regions land in the same paint. Under CI's sl\n[…]\n new scroll\n position.\n\nNeither reproduced locally after ~250 runs across full-suite and\ntargeted repeat-each invocations, consistent with CI-only timing\npressure rather than a functional regression.",
"is_bot": false,
"headline": "test(e2e): fix two flaky webkit-only assertions in CI",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-12T03:20:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "761b68a98091f806730ece0568f5eeb5c88f4d4e",
"body": "Adds a \"Large Documents\" section to the homepage covering\nHighlightVirtual and headless svelte-highlight/tokenized-document,\nplus an unlisted /preview-virtual kitchen sink (bounded-DOM-node\ncounter, overscan/checkpointInterval/jump-to-line controls, several\nlanguages, document swapping, CodeWindow composition, and a live\nheadless lineRange demo), following the site's existing preview-*\nconvention.",
"is_bot": false,
"headline": "docs(www): document HighlightVirtual and add a preview-virtual page",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-12T03:20:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "588c332bbc27a4790487b2868ccce368c2272aa1",
"body": "Two bugs in the just-shipped HighlightVirtual: a static\nclass=\"shl-virtual\" attribute combined with class:hljs and\n{...$$restProps} was silently dropped whenever a consumer also\npassed class (the normal way to theme or size the component),\nlosing all of the component's own layout CSS. And the hidden\n[…]\nlass: directive instead of a static class\nattribute, and by giving the component's <pre> position: relative\nso absolutely positioned descendants anchor to it. Both are covered\nby new regression tests.",
"is_bot": false,
"headline": "fix(components): stop HighlightVirtual's class and sizer from leaking",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-12T03:20:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3d452e293f698dc4d76a5674286a0ee2e840d9a8",
"body": "Make rendering cost independent of document length by exploiting the\nengine's serializable parse checkpoints:\n\n- new svelte-highlight/tokenized-document: a TokenizedDocument that\n snapshots the tokenizer every N lines and produces highlighted\n HTML for any line range in O(window + interval); token\n[…]\ne differentially tested against a straight-\n through parse across the corpus: checkpointing never changes\n output\n\nAdditive: one new component, one new module, no API changes to\nexisting components.",
"is_bot": false,
"headline": "feat(components): windowed rendering via a checkpointed document index",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-12T03:20:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1bfe1328d1bab99a053d54cd2cc19d0266eed130",
"body": "Promote the engine's token surface from internal modules to\ndocumented, semver-stable exports so highlighting can be consumed\nheadlessly and future features (transformers, windowing, alternate\nrender targets) build on a stable seam:\n\n- new svelte-highlight/engine subpath: ScopeEvent stream and\n TEX\n[…]\n is\n generated data versioned with the library; Snapshot is a\n serializable format within a version\n- README: headless and server-side usage\n\nNo behavioral changes to existing components or exports.",
"is_bot": false,
"headline": "feat(engine): expose the scope-event stream as public API (#464)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-11T17:23:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca0c0f57b6bfb8539713f0c00a3239ee276c8b02",
"body": "Tokenizer.subContinuations carried an embedded sub-language's leftover\nparse frames forward by name alone, for the outer tokenizer's whole\nlifetime. That's correct for resuming the *same* embedding across\nsegments (streaming edits, snapshot()/restore()), but nothing stopped\na later, textually unrela\n[…]\nn the heading/emphasis case, which turned out to be a different,\nseparate, still-open markdown grammar-conversion gap - the real-file\nallowlist entry for README.md is updated to describe that instead.",
"is_bot": false,
"headline": "fix(engine): scope sub-language continuation state to its own occurrence",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-11T17:01:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "956cf17459b60495dd9a8bb38f85f5e7aa262c11",
"body": "Compile every highlight.js theme into a structured ThemePalette at\nbuild time and ship a CSS-variable theming architecture alongside\nthe existing stylesheet strings:\n\n- themes/base.css: one shared structural stylesheet mapping .hljs\n classes to --shl-* custom properties, with fallback chains that\n \n[…]\ndropped declaration\n\nThe legacy string exports (svelte-highlight/styles/*) and the\nscoped-CSS HighlightStyle path are unchanged and fully supported.\nCustom classPrefix users remain on the legacy path.",
"is_bot": false,
"headline": "feat(styles): compile themes to palettes with CSS-variable theming",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-11T17:01:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2f5f2c888f43757916bc855d7cf831e1420806f0",
"body": "…nt markdown embeds (#462)\n\nTokenizer.subContinuations (src/engine.js) is keyed only by\nsub-language name and scoped to the outer tokenizer's whole\nlifetime. It exists so one embedded region can resume across\nseparate flush() calls - e.g. streaming edits via HighlightStream/\nHighlightEditable, resto\n[…]\nthe correct fix\nneeds to scope continuation by embedding occurrence (not just\nsub-language name) while preserving it across snapshot()/restore().\nThat's a deliberate, separate change from this report.",
"is_bot": false,
"headline": "test(engine): document a subContinuations state leak across independe…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-11T16:20:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "85a0706d48d01ba332a84052ae8e2a67eb54a310",
"body": null,
"is_bot": false,
"headline": "feat: replace highlight.js runtime with an original engine (#461)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-11T05:03:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fe263d652bd3213659ee93e935df70be29e6dcb",
"body": null,
"is_bot": false,
"headline": "v7.15.0",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-11T04:15:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "20e280bd2f06d46c2a986c8181756fc8e41a047e",
"body": "…innerText\n\ninnerText forces a synchronous layout on every keystroke and, on\nFirefox, can return a stale value right after editing a text node\nlast written via textContent -- the exact bug the css-highlights\nengine had to special-case around.\n\nVerified natively (execCommand insertText, the primitive\n[…]\noth engines can read textContent\nunconditionally, dropping the per-engine branch and the layout cost.\n\nConfirmed no behavior change against the full Playwright suite across\nall three browser projects.",
"is_bot": false,
"headline": "perf(components): read HighlightEditable's code via textContent, not …",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T23:50:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "08334942a7e497da656c447e456073012b31e213",
"body": "… unmounts\n\nDedup picked the first-mounted instance sharing a theme+scope key to\nrender the shared <style> tag and froze that choice for its lifetime.\nIf that instance unmounted while sibling instances with the same key\nwere still mounted, the tag disappeared and every surviving instance\nlost its th\n[…]\nace the plain ref count with a store holding an ordered queue of\nowner tokens per key: siblings reactively promote the next-in-line\ninstance when the current owner releases, instead of losing the tag.",
"is_bot": false,
"headline": "fix(components): hand off HighlightStyle's <style> tag when its owner…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T23:50:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6ed5775297ba7bffe28fb157c3e530157331cd8b",
"body": "Opt-in engine=\"css-highlights\" keeps the editable DOM as plain text\nand paints tokens as CSS.highlights ranges via a custom hljs emitter,\nso repaints never replace nodes on unaffected lines. Theme colors come\nfrom a converter that rewrites .hljs-* class rules into ::highlight()\nrules (colors only — the API's cross-browser envelope). Falls back to\nthe DOM engine where CSS.highlights is unavailable. Experimental;\nbrowser floor Chrome 105 / Safari 17.2 / Firefox 140.",
"is_bot": false,
"headline": "feat(components): experimental CSS Custom Highlight engine for editable",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T23:50:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "64509e188c887e624def519bb22e7f83e808bd19",
"body": "Adds a \"Streaming\" section to the docs homepage with a basic demo and\na speed/auto-scroll control panel, plus an unlisted /preview-highlight-stream\nroute exercising chunk-by-chunk streaming, multi-line re-tokenization,\nauto-scroll detach, and caret theming. All examples simulate streaming\nclient-side since the docs site has no real streaming backend.",
"is_bot": false,
"headline": "docs(www): document HighlightStream and add a kitchen-sink preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T16:29:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51754f65c5f020882da558285b78eb6af676a3c1",
"body": "Rendering LLM output is the dominant new highlighting use case and no\nSvelte-native solution exists. HighlightStream re-highlights the\ngrowing buffer per animation frame (hljs is fast synchronously) but\nrenders through the span-safe line splitter with keyed per-line DOM,\nso unchanged lines are never\n[…]\nix, typically one line per frame. Handles arbitrary chunk\nboundaries, re-tokenizes earlier lines when a multi-line construct\ncloses, sticks to bottom unless the user scrolls up, and finalizes on\ndone.",
"is_bot": false,
"headline": "feat(components): add HighlightStream for incrementally streamed code",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T16:29:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "212b880d26e3d22035e8f3fe17ce998924df1ade",
"body": "…ightEditable\n\nCover the line-repaint optimization directly: an edit on a large\ndocument must leave unrelated line elements connected and stay within\na generous time budget, catching a regression to whole-document\ninnerHTML rebuilds.",
"is_bot": false,
"headline": "test(components): add DOM-stability and perf-smoke coverage for Highl…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T16:13:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c094a180a2564efe0001af5c235b7c5fb77cbfab",
"body": "The undo stack retained up to historyLimit full copies of the\ndocument. Entries are now prefix/suffix-trimmed splices, bounding\nmemory by edit size rather than document size, with burst\ncoalescing and event shape preserved.",
"is_bot": false,
"headline": "perf(components): store HighlightEditable history as slice diffs",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T16:13:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51615d6b9e3b7ca69f705cc88f046192a766c120",
"body": "…used\n\nA document-level selectionchange listener stringified the entire\neditor content on every selection change anywhere on the page.",
"is_bot": false,
"headline": "perf(components): track selection only while HighlightEditable is foc…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T16:13:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bff41efdc1cbc2cd772f34555f138e1cfb60177",
"body": "Every keystroke rebuilt the whole highlighted DOM via innerHTML and\nre-walked it to restore the caret, making large documents jank.\nPainting now diffs span-safe line fragments and replaces only changed\nline elements — typically one per edit.",
"is_bot": false,
"headline": "perf(components): repaint only changed lines in HighlightEditable",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T16:13:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4475d08571fc470ed7a25e3e4a41a40b687f7789",
"body": "…455)\n\nUpdates re-highlighted the element's own highlighted output when code\nwas omitted, grammar errors escaped the action, and destroy left the\nmutated DOM behind. Snapshot source text on init, highlight from the\nsnapshot, guard hljs errors, and restore original content on destroy.",
"is_bot": false,
"headline": "fix(action): make the `highlight` action idempotent and reversible (#…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T15:55:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3319f17e27aaa8e6f3374066c42d9efe642339ff",
"body": "hljs.highlight/highlightAuto throw value.replace-is-not-a-function on\nnon-string input, crashing render — including SSR. Coerce defensively\nin Highlight, HighlightAuto, and HighlightSvelte before highlighting.",
"is_bot": false,
"headline": "fix(components): coerce non-string code before highlighting (#456)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T15:45:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "719a29781e5a413c77d865118d08d72c579029f9",
"body": "…ge (#454)\n\nThe scope class was hashed from the theme once at init while the\ninjected CSS recomputed reactively, so two blocks that mounted with\nthe same theme and later diverged shared one scope class with\nconflicting stylesheets: both themes applied to both blocks.\n\nAlso dedupes head injection (one <style> per scope class, refcounted\nin the browser) and renders nothing with a dev warning when no theme\nis provided instead of injecting the literal string \"undefined\".",
"is_bot": false,
"headline": "fix(components): recompute `HighlightStyle` scope class on theme chan…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:47:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ca043a859cc620934d76839a397e19e3e3b91e0",
"body": "…es (#451)\n\nThe language prop reactively re-registered the grammar but nothing\nrepainted, so highlighting stayed stale until the next keystroke.",
"is_bot": false,
"headline": "fix(components): re-highlight `HighlightEditable` when language chang…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:43:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d27dcd4fbed20c94b8683b22752d43314029400e",
"body": "Displayed code often carries decoration that should not survive a\ncopy: shell prompts, REPL markers, diff signs. A transform prop now\nruns before the copy function (and is what `on:copy` reports), with\nexported `stripPrompts` and `stripDiffMarkers` helpers.",
"is_bot": false,
"headline": "feat(components): add transform hook to CopyButton (#447)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:25:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09dc9802ce54340189e4b8738fa33047f4033b40",
"body": "…Ansi (#449)\n\nReal CLI output broke the parser three ways: OSC sequences (npm/cargo\nhyperlinks, title sets) leaked as visible garbage, \\r progress-bar\nframes rendered concatenated instead of overwritten, and SGR 7/9/8\n(reverse, strikethrough, conceal) were ignored. OSC 8 links now\nsurface as a link field that AnsiOutput renders as an anchor; reverse\nvideo swaps fg/bg before autoContrast runs.",
"is_bot": false,
"headline": "feat(components): handle OSC, carriage returns, and more SGR in parse…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:24:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0db821705e345d1d40dd6dc5f1bab25cba6f222a",
"body": "…tion (#450)\n\nEvery tick re-split the tokenized HTML and replaced the whole\nrevealed head via `{@html}`: O(n^2) with full DOM teardown per\ncharacter, stuttering on long snippets. The markup now renders\nonce with per-unit visibility toggling, so a tick is one classList\nmutation; tokenization runs only when highlighted changes.",
"is_bot": false,
"headline": "perf(components): reveal Typewriter units without per-tick retokeniza…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:23:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee2ebe0f48c9bc538281162932bf6c0b62b9c11f",
"body": "…wgsl preview\n\nAdd a fragment-shader snippet exercising vec2f/vec4f and\ntextureSample to make the modernized grammar's coverage visible in\nthe language preview.",
"is_bot": false,
"headline": "docs(preview): showcase short vector aliases and texture builtins in …",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:15:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f1d164b0dd6e1f329ebd33ad3dccd921381d21f",
"body": "The grammar predated several spec changes: predeclared short type\naliases (vec4f, mat4x4f, ...) were missing, no builtin functions were\nclassified at all (textureSample, dpdx, bitcast, atomics), and\naddress-space keywords were only recognized inside var<...> so\nptr<storage, f32> got nothing. Real-world shaders rendered largely\nunhighlighted.\n\nBuiltin functions require a following \"(\" to avoid over-highlighting\nidentifiers like select. Golden snapshot updated accordingly.",
"is_bot": false,
"headline": "fix(languages): modernize WGSL grammar for the current spec",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:15:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67e18c2ad4dbeda18794ca8f4cca8f3d7b35cb42",
"body": null,
"is_bot": false,
"headline": "v7.14.1",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:10:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "892f2d391fd96039a1926bdf88a4dc8ec96a60c1",
"body": "…431)\" (#452)\n\nThis reverts commit 62a97114ee84204ae9ca793b5291dadd97cd5148.\n\nPR #431 was billed as an internal refactor but converted Highlight,\nHighlightAuto, and HighlightSvelte to Svelte 5 runes ($props), which\nbreaks consumers on Svelte 3/4. Reverting to restore cross-version\ncompatibility ahead of an emergency patch release.",
"is_bot": false,
"headline": "Revert \"refactor(components): extract shared highlighter primitive (#…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-07T02:05:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dcca65cab6fd9ecc78f83e96ab735848f35ca98b",
"body": "Showcases a heredoc body containing standalone words like `true`\nnow that the region only closes at the exact matching delimiter.",
"is_bot": false,
"headline": "docs(preview): add bare-word heredoc example to HCL language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25b384ee7b83bed17bede72963e9ea5acdcdd974",
"body": "Showcases anyopaque, the 0.10+ replacement for c_void, now that it\nhighlights as a type.",
"is_bot": false,
"headline": "docs(preview): add anyopaque example to Zig language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5675899e3cb96b5cd9c622f02c8ae1793949b59a",
"body": "Showcases hint.strategy and hint.shufflekey now that dotted\nkeywords highlight correctly.",
"is_bot": false,
"headline": "docs(preview): add join hint example to KQL language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fccc52b0c4539553fc94c756a8f36f2d963c7b17",
"body": "Showcases addmod and mulmod now that the mulmod builtin typo is\nfixed.",
"is_bot": false,
"headline": "docs(preview): add mulmod example to Solidity language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dec39b5c92efce2128e754f80fab7da222af49cd",
"body": "Showcases $state<number>(...) and $derived<Item[]>(...) now that\ntyped rune calls highlight correctly as keywords.",
"is_bot": false,
"headline": "docs(preview): add typed rune call example to Svelte language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca8ace1c64924b4b06092580aa425d642eb9c357",
"body": "end: /^\\s*\\w+\\s*$/ closed the heredoc at the first bare word on its\nown line rather than the matching delimiter, so a lone `true` inside\na heredoc body terminated the string early. Use\nhljs.END_SAME_AS_BEGIN with a captured delimiter on both begin and\nend so the region only closes on the exact matching word.",
"is_bot": false,
"headline": "fix(languages): match heredoc delimiters exactly in HCL grammar",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4cffa146d1987f2e0a278940f43369b0aec7620b",
"body": "hljs compiles all begin patterns with the m flag, so ^---\\s*\\n\nmatched at any line start and a stray --- mid-document (e.g. a\nmarkdown hr) opened a bogus TypeScript frontmatter region. Add an\non:begin callback that ignores the match unless it starts at index 0.",
"is_bot": false,
"headline": "fix(languages): anchor Astro frontmatter to document start",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00e5ec86bf06144b38719f5ebc499c8ef5687647",
"body": "className: \"meta-keyword\" is a v10 class; v11 themes style\n.hljs-meta .hljs-keyword instead, so directives like [private]\nrendered unstyled. Nest a plain \"keyword\" scope inside the existing\n\"meta\" mode so the emitted spans are theme-styled.",
"is_bot": false,
"headline": "fix(languages): emit v11 scopes for just directives",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea1b6344982f455859b9737d531393a8cfceb0f8",
"body": null,
"is_bot": false,
"headline": "fix(languages): add anyopaque and dedupe fn in Zig grammar",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0aac6468c3ef290851ff555c42306bfbf1d00368",
"body": "Default $pattern is \\w+ (no dot), so hint.strategy/hint.shufflekey\ncould never match the keyword list. Add a $pattern admitting dots,\nmatching the dhall/clarity/d2 convention.",
"is_bot": false,
"headline": "fix(languages): match dotted hint keywords in KQL grammar",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ebc45cd99536588760d2aa1df42f3d2f0030b4b",
"body": null,
"is_bot": false,
"headline": "fix(languages): correct mulmod builtin in Solidity grammar",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7687177db766a3b2f6d8865b7ee29a8a10f11b83",
"body": "Lookahead omitted `<` so `$state<T>(...)` fell through to the TS\nsub-grammar. Also drop the dead `g` flag on the script-tag begin\nregexes; hljs recompiles from `.source` so it was misleading noise.",
"is_bot": false,
"headline": "fix(languages): highlight typed rune calls in Svelte grammar",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T23:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89eef0b7f8da8260a8955fc785338f0d7a86c488",
"body": "…ity (#444)\n\njq, rescript, and hlsl used (?<=)/(?<!) patterns, which throw a\nSyntaxError at RegExp compile time on Safari < 16.4 — registering any\nof these grammars crashed the page rather than degrading gracefully.\nhighlight.js core avoids lookbehind for the same reason.\n\nRewritten with hljs multi-match begin arrays and beginScope so the\nleading context is consumed but unscoped. Adds a lint-style test that\nfails if any custom grammar reintroduces lookbehind.",
"is_bot": false,
"headline": "fix(languages): remove lookbehind regexes for older-engine compatibil…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T22:54:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6579e215d71512141418974fa24816b7bc466b98",
"body": "…#445)\n\nStyle modules are written to disk by hljs name (styles/a11y-dark.js)\nbut the doc generator interpolated the camelCase binding name into\nthe module specifier, documenting imports like\n\"svelte-highlight/styles/a11yDark\" that do not resolve. Every\ndash-cased or digit-prefixed theme had broken instructions.",
"is_bot": false,
"headline": "build(scripts): emit dash-cased import paths in SUPPORTED_STYLES.md (…",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T22:48:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee46213486183ce268b6a5a7770959d7aaea0319",
"body": "Digit width was computed from the line count alone, so a block with\nstartingLineNumber=100 rendered 3-digit numbers in a gutter sized\nfor one digit.",
"is_bot": false,
"headline": "fix(components): size LineNumbers gutter by the final line number",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T22:20:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f91d158c8c6e5a0e2a1c1870d6227ada0e7a10b",
"body": "LineNumbers split highlighted HTML on \\n, cutting through spans that\nhljs emits across lines (block comments, template literals). The\nfirst line was left with an unclosed <span> and continuation lines\nlost their styling entirely.\n\nAdds a splitLines helper that closes the open span stack at each\nline break and re-opens it on the next line, the same strategy\nPrism and Shiki use for line-level transforms.",
"is_bot": false,
"headline": "fix(components): preserve multi-line highlight spans in LineNumbers",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T22:20:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edba8563da033a4174f6ace7699e6cb513ae0bb9",
"body": "parseAnsi, loadLanguage, and the scoped-style helpers have no Svelte\ndependency but were only reachable through the svelte-conditioned\nroot export, so plain Node ESM could not resolve them. scoped.js\nships a hand-written .d.ts yet had no exports entry at all.\n\nAdds ./ansi, ./load-language, and ./scoped subpaths with types +\ndefault conditions and re-exports the scoped helpers from the root\nindex for component consumers.",
"is_bot": false,
"headline": "build(scripts): export pure-JS modules with a default condition",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T22:20:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35b4669059f258ee03d547c8b6ec97a076e0d958",
"body": "npm-package.ts copies src/ contents to the package root, so the\npublished files are styles/*.css and langtag.css — the configured\n\"src/\"-prefixed globs matched nothing. Bundlers that respect\nsideEffects (webpack) could tree-shake style imports like\n\"svelte-highlight/styles/github.css\" out of user builds entirely.\n\nAdds a package-shape test that resolves every exports entry and\nasserts each sideEffects glob matches at least one published file.",
"is_bot": false,
"headline": "build(scripts): fix sideEffects globs to match published layout",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-06T22:20:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "750f00a53be161a5eee534b218e08950461ad030",
"body": "Drops the noStaticElementInteractions override for www/**/*.{svelte,astro},\nfixed upstream in 2.5.2 (biomejs/biome#10759) for svelte:window/document/body.\n\nAlso works around a Biome cross-script-scope bug where a postfix increment\n(uid++) read from a <script context=\"module\"> binding isn't tracked as a\nuse, and removes a genuinely unused _3024 style import that 2.5.2 now\ncorrectly flags.",
"is_bot": false,
"headline": "chore(deps-dev): bump @biomejs/biome to 2.5.2",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-05T02:31:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83caeeee9c49859a14bc63cafb951702752e5a33",
"body": "Showcases $state.raw, $derived.by, $effect.pre, $effect.tracking,\nand $props.id now that they highlight correctly as keywords.",
"is_bot": false,
"headline": "docs(preview): add dotted rune suffix example to Svelte language preview",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-03T18:31:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9b08be202e275f60a9b5e71a98743cb9e74cd71",
"body": "$effect.pre, $effect.tracking, $effect.pending, $effect.root,\n$props.id, and $inspect.trace fell through to the TypeScript\nsub-grammar because RUNE_SUFFIXES only listed raw|snapshot|by|eager.",
"is_bot": false,
"headline": "fix(languages): highlight dotted Svelte 5 rune suffixes as keywords",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-03T18:31:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3d09d92e34ec40e36909bea2b547e0f5647fdc8",
"body": "@playwright/experimental-ct-svelte stays at 1.58.2, its latest\npublished release; the two packages aren't version-locked.",
"is_bot": false,
"headline": "chore(deps-dev): bump @playwright/test to 1.61.1",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-03T04:38:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2dee05e3b0e2dfe1e2028d2da33f54bd4faf99f",
"body": "Root-level playwright/ duplicated the tests/ directory that\nalready holds testDir. Relocating to tests/e2e/playwright and\npointing ctTemplateDir there keeps all Playwright assets in one\nplace.",
"is_bot": false,
"headline": "test(playwright): move component-testing template under tests/",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-03T04:38:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecbe46ad25829666fc76e2cc4d363a38b4b79dee",
"body": "SUPPORTED_LANGUAGES.md claimed all languages were \"exported\nfrom highlight.js,\" but 52 are custom svelte-highlight grammars.\nSplit the header count so the source of each language is accurate.",
"is_bot": false,
"headline": "docs(languages): clarify highlight.js vs custom language counts (#438)",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-03T00:22:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c07118867f278da77af15929ea314e49ef37f521",
"body": null,
"is_bot": false,
"headline": "v7.14.0",
"author_name": "Eric Liu",
"author_login": "metonym",
"committed_at": "2026-07-03T00:11:19Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 69,
"commits_last_year": 447,
"latest_release_at": "2026-07-19T22:24:49Z",
"latest_release_tag": "v7.16.0",
"releases_from_tags": false,
"days_since_last_push": 2,
"active_weeks_last_year": 41,
"days_since_latest_release": 6,
"mean_days_between_releases": 30.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "svelte-highlight",
"exists": true,
"license": "MIT",
"keywords": [
"svelte",
"svelte components",
"highlight.js",
"syntax highlight"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/svelte-highlight",
"is_deprecated": false,
"latest_version": "7.16.0",
"repository_url": "https://github.com/metonym/svelte-highlight",
"versions_count": 89,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 188536,
"first_published_at": "2019-11-09T22:14:49.291000Z",
"latest_published_at": "2026-07-19T22:24:29.533000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
}
]
},
"popularity": {
"forks": 14,
"stars": 335,
"watchers": 2,
"fork_history": {
"days": [
{
"date": "2020-04-26",
"count": 1
},
{
"date": "2021-06-08",
"count": 1
},
{
"date": "2022-02-20",
"count": 1
},
{
"date": "2022-02-25",
"count": 1
},
{
"date": "2022-05-14",
"count": 1
},
{
"date": "2022-06-04",
"count": 1
},
{
"date": "2022-12-31",
"count": 1
},
{
"date": "2023-05-27",
"count": 1
},
{
"date": "2023-09-30",
"count": 1
},
{
"date": "2023-11-05",
"count": 1
},
{
"date": "2023-12-16",
"count": 1
},
{
"date": "2024-07-20",
"count": 1
},
{
"date": "2024-10-05",
"count": 1
},
{
"date": "2025-10-08",
"count": 1
}
],
"complete": true,
"collected": 14,
"total_forks": 14
},
"star_history": null,
"open_issues_and_prs": 5
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"examples/rollup/tsconfig.json",
"examples/routify/tsconfig.json",
"examples/sveltekit/tsconfig.json",
"examples/vite/tsconfig.json",
"examples/vite@svelte-4/tsconfig.json",
"examples/webpack/tsconfig.json",
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 60316,
"source_files_sampled": 321,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 2,
"malicious_count": 0,
"assessed_package": "npm:svelte-highlight@7.16.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "magic-string",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.30.17"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "magic-string",
"direct": true,
"version": "^0.30.17",
"ecosystem": "npm"
},
{
"name": "@astrojs/svelte",
"direct": false,
"version": "^8.1.2",
"ecosystem": "npm"
},
{
"name": "@biomejs/biome",
"direct": false,
"version": "2.5.5",
"ecosystem": "npm"
},
{
"name": "@playwright/experimental-ct-svelte",
"direct": false,
"version": "1.58.2",
"ecosystem": "npm"
},
{
"name": "@playwright/test",
"direct": false,
"version": "1.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/plugin-commonjs",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "@rollup/plugin-node-resolve",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "@roxi/routify",
"direct": false,
"version": "^3.6.4",
"ecosystem": "npm"
},
{
"name": "@sveltejs/adapter-node",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "@sveltejs/kit",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "@sveltejs/vite-plugin-svelte",
"direct": false,
"version": "^3.1.2",
"ecosystem": "npm"
},
{
"name": "@sveltejs/vite-plugin-svelte",
"direct": false,
"version": "^5.1.1",
"ecosystem": "npm"
},
{
"name": "@sveltejs/vite-plugin-svelte",
"direct": false,
"version": "^7.1.2",
"ecosystem": "npm"
},
{
"name": "@sveltejs/vite-plugin-svelte",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "@tsconfig/svelte",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "@types/bun",
"direct": false,
"version": "^1.3.14",
"ecosystem": "npm"
},
{
"name": "@types/jest",
"direct": false,
"version": "^30.0.0",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "^25.9.5",
"ecosystem": "npm"
},
{
"name": "@typescript/native-preview",
"direct": false,
"version": "^7.0.0-dev.20260707.2",
"ecosystem": "npm"
},
{
"name": "astro",
"direct": false,
"version": "^6.4.8",
"ecosystem": "npm"
},
{
"name": "carbon-components-svelte",
"direct": false,
"version": "^0.110.1",
"ecosystem": "npm"
},
{
"name": "carbon-preprocess-svelte",
"direct": false,
"version": "^0.11.37",
"ecosystem": "npm"
},
{
"name": "css-loader",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "cssnano",
"direct": false,
"version": "^7.1.9",
"ecosystem": "npm"
},
{
"name": "cssnano-preset-lite",
"direct": false,
"version": "^4.0.6",
"ecosystem": "npm"
},
{
"name": "highlight.js",
"direct": false,
"version": "11.11.1",
"ecosystem": "npm"
},
{
"name": "html-webpack-plugin",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "mini-css-extract-plugin",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "^8.5.19",
"ecosystem": "npm"
},
{
"name": "postcss-discard-duplicates",
"direct": false,
"version": "^7.0.4",
"ecosystem": "npm"
},
{
"name": "postcss-inline-css-vars",
"direct": false,
"version": "^0.1.0",
"ecosystem": "npm"
},
{
"name": "postcss-merge-rules",
"direct": false,
"version": "^7.0.11",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "rollup-plugin-svelte",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "rollup-plugin-terser",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "svelte",
"direct": false,
"version": "^4.2.20",
"ecosystem": "npm"
},
{
"name": "svelte",
"direct": false,
"version": "^5.56.3",
"ecosystem": "npm"
},
{
"name": "svelte",
"direct": false,
"version": "^5.56.6",
"ecosystem": "npm"
},
{
"name": "svelte",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "svelte-highlight",
"direct": false,
"version": "^7.16.0",
"ecosystem": "npm"
},
{
"name": "svelte-loader",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "svelte-preprocess",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^5.4.21",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^7.3.6",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^8.1.2",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "webpack",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "webpack-cli",
"direct": false,
"version": "latest",
"ecosystem": "npm"
},
{
"name": "webpack-dev-server",
"direct": false,
"version": "latest",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 50,
"direct_count": 1,
"indirect_count": 49
}
},
"maintainership": {
"issues": {
"open_prs": 4,
"merged_prs": 334,
"open_issues": 1,
"closed_ratio": 0.988,
"closed_issues": 81,
"closed_unmerged_prs": 51
},
"bus_factor": 1,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "metonym",
"commits": 1184,
"avatar_url": "https://avatars.githubusercontent.com/u/10718366?v=4"
},
{
"type": "User",
"login": "WillsterJohnson",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/85991558?v=4"
},
{
"type": "User",
"login": "pjebs",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/5377970?v=4"
}
],
"contributors_sampled": 3,
"top_contributor_share": 0.997
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"release.yml"
],
"has_docs_dir": false,
"linter_configs": [
"biome.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/7 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 10,
"reason": "all dependencies are pinned",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 9,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "49 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "e4f6958d0fdff1aeb0c2f42b5b28c80e64e4d18b",
"ran_at": "2026-07-25T22:33:09Z",
"aggregate_score": 5.7,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-23T14:49:59Z",
"oldest_open_prs": [
{
"number": 382,
"created_at": "2025-10-12T22:13:15Z",
"last_comment_at": "2025-10-23T14:58:15Z",
"last_comment_author": "Konixy"
},
{
"number": 457,
"created_at": "2026-07-07T15:45:55Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 467,
"created_at": "2026-07-12T16:12:55Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 468,
"created_at": "2026-07-12T16:14:14Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-23T14:47:17Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 380,
"created_at": "2025-10-08T11:57:01Z",
"last_comment_at": "2025-10-12T22:13:39Z",
"last_comment_author": "metonym"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/metonym/svelte-highlight",
"host": "github.com",
"name": "svelte-highlight",
"owner": "metonym"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"security": 66,
"vitality": 95,
"community": 60,
"governance": 62,
"engineering": 76
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 95,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"commits_last_year": 447,
"human_commit_share": 1,
"days_since_last_push": 2,
"active_weeks_last_year": 41
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "41/52 weeks with commits",
"points": 28.4,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 41
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "447 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 447
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 69,
"latest_release_tag": "v7.16.0",
"releases_from_tags": false,
"days_since_latest_release": 6,
"mean_days_between_releases": 30.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "69 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 69
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~30.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 30.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 2,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 2 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 2
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 60,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"forks": 14,
"stars": 335,
"watchers": 2,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "335 stars",
"points": 40.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 335
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "14 forks",
"points": 9.3,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 14
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "2 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 2
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "excellent",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"packages": [
"svelte-highlight"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 188536
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "188,536 downloads/month across npm",
"points": 70.3,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 188536,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 62,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 19,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 3,
"top_contributor_share": 0.997
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "3 contributors",
"points": 4.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 3
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 79,
"inputs": {
"merged_prs": 334,
"open_issues": 1,
"closed_issues": 81,
"issue_closed_ratio": 0.988,
"closed_unmerged_prs": 51
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "99% of issues closed",
"points": 46.2,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 99
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "334/385 decided PRs merged",
"points": 33.2,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 334,
"decided": 385
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/7 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 66,
"inputs": {
"followers": 294,
"owner_type": "User",
"is_verified": null,
"owner_login": "metonym",
"public_repos": 161,
"account_age_days": 4197
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "294 followers of metonym",
"points": 17.8,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 294,
"login": "metonym"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "161 public repos, account ~11 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 161
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"svelte-highlight"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 6
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "89 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 89
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 76,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "biome.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [
"svelte",
"highlight-js",
"highlight",
"code",
"syntax",
"syntax-highlighting",
"svelte-component",
"typescript"
],
"has_wiki": false,
"homepage": "https://svhe.onrender.com",
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://svhe.onrender.com",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "8 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 8
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 66,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 57,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 5.7
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/7 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "all dependencies are pinned",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "49 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:svelte-highlight@7.16.0 runtime dependency closure — what installing the published package pulls in — 2 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "npm:svelte-highlight@7.16.0",
"assessed": 2
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 2,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 2,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 5
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 55,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.96,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "96 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 96,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"examples/rollup/tsconfig.json",
"examples/routify/tsconfig.json",
"examples/sveltekit/tsconfig.json",
"examples/vite/tsconfig.json",
"examples/vite@svelte-4/tsconfig.json",
"examples/webpack/tsconfig.json",
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "biome.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "examples/rollup/tsconfig.json, examples/routify/tsconfig.json, examples/sveltekit/tsconfig.json, examples/vite/tsconfig.json, examples/vite@svelte-4/tsconfig.json, examples/webpack/tsconfig.json, tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples/rollup/tsconfig.json, examples/routify/tsconfig.json, examples/sveltekit/tsconfig.json, examples/vite/tsconfig.json, examples/vite@svelte-4/tsconfig.json, examples/webpack/tsconfig.json, tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "all dependencies are pinned",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 60316,
"source_files_sampled": 321,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/321 source files over 60KB",
"points": 54.8,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 321,
"oversized": 1
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-25T22:33:25.006025Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/metonym/svelte-highlight.svg",
"full_name": "metonym/svelte-highlight",
"license_state": "standard",
"license_spdx": "MIT"
}