{"_id":"@scalar/highlight","_rev":"7-554d7cb3fd8d846e22dfde0118443f6b","name":"@scalar/highlight","dist-tags":{"latest":"0.6.0"},"versions":{"0.2.0":{"name":"@scalar/highlight","version":"0.2.0","keywords":["syntax-highlighting","highlight","code","performance"],"author":{"url":"https://github.com/scalar","name":"Scalar"},"license":"MIT","_id":"@scalar/highlight@0.2.0","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit+spam@hockey-community.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"homepage":"https://github.com/scalar/scalar","bugs":{"url":"https://github.com/scalar/scalar/issues/new/choose"},"dist":{"shasum":"2fe5b357bf5d513a6b94ddec4faa9ee4f16eed0a","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.2.0.tgz","fileCount":166,"integrity":"sha512-Z45N8///l9xMVbDQFZ26J9lqS/Q1YiO5h2yZFd/trTH4YjtVDNWEoQ4P2PU5gNyEPNwqKYD9dL28FhcFGdOjhA==","signatures":[{"sig":"MEQCIAtXQj1qGFnbXfPG0EZ8pn6N+WgkC93gtoot5CrISxvkAiAMoeRouoUMejUwXp2KcY0+5AGWmW4CTbYZbyp9FSs7xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":621003},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"gitHead":"eab8e37da3ececcb6698d53a6154663cc319f703","scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"_npmUser":{"name":"amritk","email":"amrit+spam@hockey-community.com"},"repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"_npmVersion":"11.16.0","description":"Scalar's code highlighter","directories":{},"sideEffects":["dist/all.js","**/*.css"],"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:*","rolldown":"catalog:*","highlight.js":"catalog:*","@scalar/code-highlight":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/highlight_0.2.0_1787254249862_0.6802343583567088","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@scalar/highlight","version":"0.2.1","keywords":["syntax-highlighting","highlight","code","performance"],"author":{"url":"https://github.com/scalar","name":"Scalar"},"license":"MIT","_id":"@scalar/highlight@0.2.1","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit+spam@hockey-community.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"homepage":"https://github.com/scalar/scalar","bugs":{"url":"https://github.com/scalar/scalar/issues/new/choose"},"dist":{"shasum":"bbd1b0bb4a75a914cf3139d70c221c950689000c","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.2.1.tgz","fileCount":167,"integrity":"sha512-kACPSbmkumNdO6jJns3SHUqRe8OJF/MwLYYaAxStA7kR3W/txaNYNBgJJJv4sb+92MZFLnZTB/H65w7DmZ3jqg==","signatures":[{"sig":"MEUCICMBA0L4pT2MIBHqo+rhNmLri4Hug5eaGqngaGT8x91AAiEAmpK5a+HX6d8weIVog4R90fbCSSxH6xOJO+VYWvSB98w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@scalar%2fhighlight@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":622223},"main":"dist/index.js","type":"module","_from":"file:scalar-highlight-0.2.1.tgz","types":"./dist/index.d.ts","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:43d21efb-899c-4c94-8432-62cd069894b9"}},"_resolved":"/tmp/59f63c6953e21011d6fa4d8ec8edea9a/scalar-highlight-0.2.1.tgz","_integrity":"sha512-kACPSbmkumNdO6jJns3SHUqRe8OJF/MwLYYaAxStA7kR3W/txaNYNBgJJJv4sb+92MZFLnZTB/H65w7DmZ3jqg==","repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"_npmVersion":"11.17.0","description":"Scalar's code highlighter","directories":{},"sideEffects":["dist/all.js","**/*.css"],"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","rolldown":"1.1.5","highlight.js":"^11.11.1","@scalar/code-highlight":"0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/highlight_0.2.1_1787260221387_0.8691990235714415","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@scalar/highlight","version":"0.3.0","keywords":["syntax-highlighting","highlight","code","performance"],"author":{"url":"https://github.com/scalar","name":"Scalar"},"license":"MIT","_id":"@scalar/highlight@0.3.0","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit+spam@hockey-community.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"homepage":"https://github.com/scalar/scalar","bugs":{"url":"https://github.com/scalar/scalar/issues/new/choose"},"dist":{"shasum":"50badd65d97a78f099545c0c22a0b10ed9a5ed6b","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.3.0.tgz","fileCount":170,"integrity":"sha512-g/vj14XZp9dYgjQtt9R5qoRTrFHTT5rVsisBguoTnCzhhJy/Y3qypypFPRzUI05y8JeFAf3JlVJnhk9EtrARdg==","signatures":[{"sig":"MEUCIQCQNt5o76q4WghDNJFKOBOc8ssxq+OYULBzep/lwan0+QIgOFh4+MHUArTx8jRPxaTfpBs2DvwEj2JqnNV7gq2Djxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@scalar%2fhighlight@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":627664},"main":"dist/index.js","type":"module","_from":"file:scalar-highlight-0.3.0.tgz","types":"./dist/index.d.ts","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:43d21efb-899c-4c94-8432-62cd069894b9"}},"_resolved":"/tmp/86c38ff5084e019490c80b95c6523865/scalar-highlight-0.3.0.tgz","_integrity":"sha512-g/vj14XZp9dYgjQtt9R5qoRTrFHTT5rVsisBguoTnCzhhJy/Y3qypypFPRzUI05y8JeFAf3JlVJnhk9EtrARdg==","repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"_npmVersion":"11.17.0","description":"Scalar's code highlighter","directories":{},"sideEffects":["dist/all.js","**/*.css"],"_nodeVersion":"24.19.0","dependencies":{"@types/hast":"^3.0.4"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","rolldown":"1.1.5","highlight.js":"^11.11.1","@scalar/code-highlight":"0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/highlight_0.3.0_1787914877068_0.6967454175029453","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@scalar/highlight","version":"0.3.1","keywords":["syntax-highlighting","highlight","code","performance"],"author":"Scalar (https://github.com/scalar)","license":"MIT","_id":"@scalar/highlight@0.3.1","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit@scalar.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"homepage":"https://github.com/scalar/scalar","bugs":"https://github.com/scalar/scalar/issues/new/choose","dist":{"shasum":"97379cc74c9bc370c89b3d1858a7e7aef704c9fb","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.3.1.tgz","fileCount":170,"integrity":"sha512-vIPQUnh7+N+m9gR6MTyGhz9GUYkL0FLu3O29gdk7lhn3oqG5yKKIrcqzdEusTMfP5znF1zFxww/cqFy/J0tdOA==","signatures":[{"sig":"MEYCIQC0uhwN96RcWuDl7NUBLbM1U5nJh0aAB/AHQCvIfvwLGgIhALbAuk+QSSCttUtBnlR+ZDA8qQst48rkNhqGPdcSO3aX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG7750akzur5fy5mbtbtOpmSpeK+1zh2Ud6/aKFAh6kUAiBzfRF+U4CsBT6PrBh3Rn02Kuqqbw+yT7Lkzs819Av96g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@scalar%2fhighlight@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":628197},"main":"dist/index.js","type":"module","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"43d21efb-899c-4c94-8432-62cd069894b9"}},"repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"description":"Scalar's code highlighter","directories":{},"sideEffects":["dist/all.js","**/*.css"],"dependencies":{"@types/hast":"^3.0.4"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","rolldown":"1.1.5","highlight.js":"^11.11.1","@scalar/code-highlight":"0.4.9"},"_npmOperationalInternal":{"tmp":"tmp/highlight_0.3.1_1791824044345_0.9881781184126421","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@scalar/highlight","version":"0.4.0","keywords":["syntax-highlighting","highlight","code","performance"],"author":"Scalar (https://github.com/scalar)","license":"MIT","_id":"@scalar/highlight@0.4.0","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit@scalar.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"homepage":"https://github.com/scalar/scalar","bugs":"https://github.com/scalar/scalar/issues/new/choose","dist":{"shasum":"3df704c82d56c90facd88bffda7e486f712f62ce","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.4.0.tgz","fileCount":173,"integrity":"sha512-S/Ykfwquymq/EO1AlykNxFE749YgjW4TbhNdBAvrn3Vg1ouHJpIwegk607FQKZ8f7KGIgzHiG/H9MJAjH9d2ow==","signatures":[{"sig":"MEUCIQDzQ8s+qORyauYHiaLtl/6HvpyXxZ8hD4SzNtpgSBWS3gIgEkCT7Ji8HPy9NdKUHQI7veRC5KTe42hhWb4lVlJKPng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDnoSp0wpLd0MHoOjD5qO85c67orle2BqckIMIXHOBYaAiA973JulwykA8myfSce3hDiHArE1N5bYk2XfnYnaIaLBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@scalar%2fhighlight@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":697326},"main":"dist/index.js","type":"module","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"43d21efb-899c-4c94-8432-62cd069894b9"}},"repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"description":"Scalar's code highlighter","directories":{},"sideEffects":["dist/all.js","**/*.css"],"dependencies":{"@types/hast":"^3.0.4"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","rolldown":"1.1.5","highlight.js":"^11.11.1","@scalar/code-highlight":"0.4.10"},"_npmOperationalInternal":{"tmp":"tmp/highlight_0.4.0_1792160722107_0.5211385500257897","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@scalar/highlight","version":"0.5.0","keywords":["syntax-highlighting","highlight","code","performance"],"author":"Scalar (https://github.com/scalar)","license":"MIT","_id":"@scalar/highlight@0.5.0","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit@scalar.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"homepage":"https://github.com/scalar/scalar","bugs":"https://github.com/scalar/scalar/issues/new/choose","dist":{"shasum":"48882a1948f7611e7e99017ad3eb16fdacf6faf1","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.5.0.tgz","fileCount":173,"integrity":"sha512-QSQivoGSiRmbYBCzCFlg4WHzMxOhGI8vax55Dk8HhnhtRzrg9JwBoTNXTWHR3I8FXJGjAdlW35Q40H3FOyv/fQ==","signatures":[{"sig":"MEQCIFSWl7kT2/7xMSnzgDQVJTntNQcOmP8CEH7g8gNTODssAiAtZqSjYVnJitw71pSibYxN0G8tJpU7OS4fjS0Hyuxlcg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA1jpSWBNtI7DIv76BeFD/sCNWnUWLFd9FuzueMgD6IlAiEAvupHWkAspjKqngb4ya6a87XNqYY9qjYy4fDyYrQXrm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@scalar%2fhighlight@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":718326},"main":"dist/index.js","type":"module","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"43d21efb-899c-4c94-8432-62cd069894b9"}},"repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"description":"Scalar's code highlighter","directories":{},"sideEffects":["dist/all.js","**/*.css"],"dependencies":{"@types/hast":"^3.0.4"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.10","rolldown":"1.1.5","highlight.js":"^11.11.1","@scalar/code-highlight":"0.4.10"},"_npmOperationalInternal":{"tmp":"tmp/highlight_0.5.0_1792506454851_0.10193264477858222","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"_id":"@scalar/highlight@0.6.0","bugs":"https://github.com/scalar/scalar/issues/new/choose","dist":{"shasum":"f44162277b5190480d53383710da181c3265f599","tarball":"https://registry.npmjs.org/@scalar/highlight/-/highlight-0.6.0.tgz","fileCount":176,"integrity":"sha512-Vb57bGAn5emtHBQa6QPjSq2Z2Xo2Z3cGS6diV/BmYWn0kzDKqFK1B4SFfFNJNhJLsm798kdI1iJz697lXnMhRA==","signatures":[{"sig":"MEMCIB9BUbhiLoCQuVFUO0fiWNF2Iv2HfWtV9nA/hIyH9KS4Ah9XDhC4JjRze7ZdkFeUoDL9FqQCrrdLnv2kQn06vJ02","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCDTSeDUzIAHhojpCfzrrk7nElQfoIGCES/cIP0bSBvUwIgTObttUgf4Af+yBIf188cgj1CLcCdbZdHzj8anM7dBAM="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@scalar%2fhighlight@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":728638},"main":"dist/index.js","name":"@scalar/highlight","type":"module","author":"Scalar (https://github.com/scalar)","module":"dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./all":{"types":"./dist/all.d.ts","import":"./dist/all.js","default":"./dist/all.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./lazy":{"types":"./dist/lazy.d.ts","import":"./dist/lazy.js","default":"./dist/lazy.js"},"./compat":{"types":"./dist/compat/index.d.ts","import":"./dist/compat/index.js","default":"./dist/compat/index.js"},"./langs/*":{"types":"./dist/langs/*.d.ts","import":"./dist/langs/*.js","default":"./dist/langs/*.js"},"./style.css":{"import":"./dist/style.css","default":"./dist/style.css","require":"./dist/style.css"}},"license":"MIT","scripts":{"size":"tsx bench/size.ts","test":"vitest --run","bench":"tsx bench/bench.ts","build":"tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && shx cp src/style.css dist/style.css","test:watch":"vitest","types:check":"tsgo --noEmit","compat:report":"tsx bench/compat-report.ts"},"version":"0.6.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"43d21efb-899c-4c94-8432-62cd069894b9"}},"homepage":"https://github.com/scalar/scalar","keywords":["syntax-highlighting","highlight","code","performance"],"repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"description":"Scalar's code highlighter","directories":{},"maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit@scalar.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"sideEffects":["dist/all.js","**/*.css"],"dependencies":{"@types/hast":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"4.1.12","rolldown":"1.2.14","highlight.js":"^11.12.0","@scalar/code-highlight":"0.4.11"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/highlight_0.6.0_1792750554982_0.5036558747421032"}}},"time":{"created":"2026-08-20T19:30:49.667Z","modified":"2026-10-23T10:15:55.593Z","0.2.0":"2026-08-20T19:30:50.012Z","0.2.1":"2026-08-20T21:10:21.541Z","0.3.0":"2026-08-28T11:01:17.231Z","0.3.1":"2026-10-12T16:54:04.415Z","0.4.0":"2026-10-16T14:25:22.217Z","0.5.0":"2026-10-20T14:27:34.952Z","0.6.0":"2026-10-23T10:15:55.120Z"},"bugs":"https://github.com/scalar/scalar/issues/new/choose","author":"Scalar (https://github.com/scalar)","license":"MIT","homepage":"https://github.com/scalar/scalar","keywords":["syntax-highlighting","highlight","code","performance"],"repository":{"url":"git+https://github.com/scalar/scalar.git","type":"git","directory":"packages/highlight"},"description":"Scalar's code highlighter","maintainers":[{"name":"cameronrohani","email":"cam@scalar.com"},{"name":"marclave","email":"marc@scalar.com"},{"name":"scalar_geoff","email":"geoff@scalar.com"},{"name":"hwkr","email":"bn@hwkr.me"},{"name":"hanspagel","email":"mail@hanspagel.com"},{"name":"amritk","email":"amrit@scalar.com"},{"name":"scalar-machine","email":"machine@scalar.com"}],"readme":"# @scalar/highlight\n\n[![Version](https://img.shields.io/npm/v/%40scalar/highlight)](https://www.npmjs.com/package/@scalar/highlight)\n[![Downloads](https://img.shields.io/npm/dm/%40scalar/highlight)](https://www.npmjs.com/package/@scalar/highlight)\n[![License](https://img.shields.io/npm/l/%40scalar%2Fhighlight)](https://www.npmjs.com/package/@scalar/highlight)\n[![Discord](https://img.shields.io/discord/1135330207960678410?style=flat&color=5865F2)](https://discord.gg/scalar)\n\nScalar's code highlighter.\n\n<picture>\n  <source\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"https://github.com/user-attachments/assets/380abb34-8814-4b34-8926-19ab84a91d79\">\n  <img\n    alt=\"Python, TypeScript, Rust and HTTP highlighted by @scalar/highlight\"\n    src=\"https://github.com/user-attachments/assets/8ac62023-f56c-4dcd-a7e3-d0272a43c610\">\n</picture>\n\n- **Small.** 3.5 KB core, ~1.7 KB for Python, gzipped. Nothing you do not import.\n- **No theme system.** Colors come from the `--scalar-*` variables `@scalar/themes` already defines, so a code block follows the app's theme and switches with `.light-mode` / `.dark-mode` — without being re-highlighted.\n- **Zero runtime dependencies.**\n\nForty-one languages ship today: Python, JavaScript/TypeScript/JSX/TSX, Rust, Go, C, C++, C#, F#, Java, Kotlin, Scala, Swift, Objective-C, OCaml, Haskell, Elixir, Clojure, Dart, Julia, Mojo, PHP, Perl, Ruby, Lua, R, MATLAB, Bash, PowerShell, SQL, GraphQL, HTTP, YAML, JSON, TOML/INI, CSS, HTML, Markdown, Dockerfiles, Makefiles, nginx configs, and diffs.\n\n```bash\nnpm install @scalar/highlight\n```\n\n## Quick start\n\n```js\nimport { highlightBlock, registerLanguage } from '@scalar/highlight';\nimport python from '@scalar/highlight/langs/python';\nimport '@scalar/highlight/style.css';\n\nregisterLanguage(python);\n\nconst html = highlightBlock(source, 'python', { lineNumbers: true });\n```\n\nThat is the whole setup. `html` is a `<pre class=\"shl-code\">…</pre>` block, and the\nstylesheet colors it from the theme already loaded on the page.\n\n> **Requires a mode class.** `@scalar/themes` defines its palette only under\n> `.light-mode` or `.dark-mode`, so one of them must be on a container — the same\n> contract every other Scalar component has. Without it the block still renders,\n> readable but unstyled.\n\n### Loading languages on demand\n\n```js\nimport { highlight } from '@scalar/highlight';\nimport { loadLanguage } from '@scalar/highlight/lazy';\n\nawait loadLanguage('rust');   // one dynamic import, one bundler chunk\nhighlight(source, 'rust');\n```\n\nEvery entry in the loader is a static `import()`, so bundlers split each language into its\nown chunk. The initial chunk with the loader and no languages is 5.0 KB.\n\n### Entry points\n\n| Import | What you get |\n| --- | --- |\n| `@scalar/highlight` | `highlight`, `highlightBlock`, `tokenize`, the registry |\n| `@scalar/highlight/style.css` | The stylesheet. Required for color |\n| `@scalar/highlight/core` | Just the engine |\n| `@scalar/highlight/langs/<name>` | One grammar |\n| `@scalar/highlight/lazy` | `loadLanguage`, for code splitting |\n| `@scalar/highlight/all` | Every language, registered. For build-time rendering |\n| `@scalar/highlight/compat` | Drop-in `syntaxHighlight` for `@scalar/code-highlight` |\n\n### Rendering somewhere other than HTML\n\n```js\nimport { tokenize } from '@scalar/highlight';\n\nfor (const { scope, text } of tokenize(source, 'python')) {\n  // scope is 'keyword.control' | 'string' | … | null\n}\n```\n\nFor hot paths there is a streaming form that allocates nothing per token — it is what the\nHTML renderer uses:\n\n```js\nimport { tokenizeStream, resolveGrammar } from '@scalar/highlight';\n\ntokenizeStream(source, resolveGrammar('python'), (scope, start, end) => { … });\n```\n\n## Bundle size\n\nBundled with Rolldown, minified, gzipped. Entry points *call* the API rather than\nre-exporting it, so tree-shaking runs the way it does in a real app.\n\n| Bundle | Gzipped |\n| --- | ---: |\n| `@scalar/highlight` core | 3.50 KB |\n| …+ Python | 5.44 KB |\n| …lazy loader, initial chunk | 5.05 KB |\n| …`style.css` | 1.26 KB |\n\nPer language, on top of the core: `diff` 0.21 KB · `json` 0.29 KB · `html` 0.53 KB · `http` 0.67 KB · `nginx` 0.69 KB · `ini` 0.70 KB · `graphql` 0.73 KB · `css` 0.79 KB · `yaml` 0.82 KB · `rust` 0.88 KB · `go` 0.90 KB · `makefile` 0.90 KB · `markdown` 0.91 KB · `dockerfile` 0.95 KB · `bash` 1.03 KB · `sql` 1.11 KB · `java` 1.15 KB · `dart` 1.17 KB · `lua` 1.19 KB · `r` 1.28 KB · `c` 1.31 KB · `clojure` 1.32 KB · `scala` 1.36 KB · `julia` 1.37 KB · `elixir` 1.38 KB · `kotlin` 1.38 KB · `powershell` 1.38 KB · `matlab` 1.43 KB · `objectivec` 1.43 KB · `swift` 1.44 KB · `ocaml` 1.45 KB · `haskell` 1.50 KB · `csharp` 1.52 KB · `mojo` 1.54 KB · `fsharp` 1.68 KB · `python` 1.71 KB · `ruby` 1.74 KB · `cpp` 1.78 KB · `perl` 1.87 KB · `php` 2.01 KB · `javascript` 2.11 KB.\n\nReproduce with `pnpm size`.\n\n## How it works\n\nA grammar is a small **state machine**, and each state is compiled to **one merged regular\nexpression**.\n\n```js\n{\n  match: '\\\\b(def)([ \\\\t]+)(\\\\w+)([ \\\\t]*)(\\\\()',\n  scope: ['keyword.declaration', null, 'function', null, 'punctuation.bracket'],\n  push: 'params',\n}\n```\n\nThree decisions follow from that shape and explain most of the performance:\n\n**States describe only what is interesting.** Anything a state does not match is emitted\nwith that state's `default` scope. A string state needs three rules — escape,\ninterpolation, closing quote — not a rule for \"string content\". Sparse grammars are why\neach language is around a kilobyte.\n\n**One `exec` finds the next token.** Rules are merged into a single ordered alternation, so\nthe regex engine skips plain text in native code instead of a JavaScript loop trying\npatterns at every position. Rule order is priority order, exactly as alternation already\nworks.\n\n**Capture offsets are resolved off the hot path.** Scoping capture groups needs the `d`\nflag, which makes the engine compute offsets for *every* group on *every* match — measured\nat ~40% of scan throughput. Instead the merged regex runs without `d`, and the handful of\nrules that need offsets re-run their own small sticky pattern at the position that already\nmatched.\n\nRendering streams: `tokenize` hands ranges to a callback, and the HTML renderer\nconcatenates directly from the source string. No token objects are allocated, adjacent\nranges sharing a scope merge into one span, and unscoped text is written bare.\n\n## Scopes and styling\n\nGrammars emit scopes from a [fixed vocabulary](src/core/scopes.ts) — `keyword.control`,\n`string.escape`, `variable.parameter`, and so on. Each maps to a short class\n(`<span class=\"shl-kd\">def</span>`), and [`style.css`](src/style.css) points those\nclasses at fourteen semantic slots:\n\n```css\n/* the entire theming surface, per token kind */\n.shl-code .shl-s { color: var(--scalar-hl-string); }\n\n/* recolor every string in the app, in one line */\n.shl-code { --scalar-hl-string: var(--scalar-color-purple); }\n```\n\nBecause the color lives in a variable that `@scalar/themes` already swaps, changing theme\nis a class change on a container. The HTML never moves — which also means a page can be\nrendered once at build time and still respect a runtime theme toggle.\n\n### About the `color-mix()`\n\nScalar's semantic palette is tuned for UI — badges, labels, large text — and several hues\nare too light for 13px code on a light background. Against `--scalar-background-2` the\ndefault theme's light values give yellow 1.6:1, accent 2.8:1 and orange 2.9:1, where WCAG\nAA wants 4.5:1.\n\nSo each hue is pulled toward `--scalar-color-1`, the theme's own text color. That preserves\nthe hue's identity — a custom theme's green still drives strings — while guaranteeing it\nmoves toward whatever contrasts with that theme's background. `src/style.test.ts`\nrecomputes every resolved color in oklab and fails if one drops below AA, so the guarantee\nstays checked rather than checked once.\n\n`--scalar-hl-punctuation` is the one deliberate exception, held to the 3:1 non-text bar.\nBrackets and commas are structural; lifting them to 4.5:1 would make them as loud as the\ncode they punctuate.\n\n## Adding a language\n\nA grammar is plain data with no imports beyond its type:\n\n```ts\nimport type { Grammar } from '@scalar/highlight/core';\n\nconst toml: Grammar = {\n  name: 'toml',\n  aliases: ['tml'],\n  states: {\n    root: {\n      rules: [\n        { match: '#[^\\\\n]*', scope: 'comment' },\n        { match: '^\\\\[[^\\\\]]+\\\\]', scope: 'namespace' },\n        { match: '(\\\\w+)(\\\\s*)(=)', scope: ['property', null, 'operator'] },\n        { match: '\"', scope: 'string', push: 'string' },\n      ],\n    },\n    string: {\n      default: 'string',\n      rules: [\n        { match: '\\\\\\\\.', scope: 'string.escape' },\n        { match: '\"', scope: 'string', pop: true },\n      ],\n    },\n  },\n};\n```\n\nRules may `push`, `pop` or `set` states, and `{ include: 'other-state' }` splices another\nstate's rules in at that position, keeping priority order. The compiler rejects unknown\nstate names, circular includes, backreferences (group numbers shift when rules merge) and\nscope arrays longer than the pattern's capture count — all at compile time, not mid-tokenize\non a rare branch.\n\nWhat a backreference would do, `remember` does across states: a rule that enters a state\ncan remember one of its capture groups, and that state's patterns match it again with\n`{{remembered}}`. A heredoc closes only on its own marker, a raw string only on the run of\nquotes that opened it, a YAML block scalar at the first line indented no further than its key:\n\n```ts\n{ match: '<<(\\\\w+)', scope: 'string.special', push: 'heredoc', remember: 1 },\n// …\nheredoc: {\n  default: 'string',\n  rules: [{ match: '^{{remembered}}$', scope: 'string.special', pop: true }],\n},\n```\n\nA state can also hand its body to another language: `embed: { language: 'javascript',\nuntil: '</script' }` tokenizes everything up to `</script` with the JavaScript grammar, if\nit is registered, and leaves the closing tag to the state below. The HTML grammar does this\nfor `<script>` and `<style>` without importing either grammar. `language` can also be\n`REMEMBERED`, which embeds whatever language the entering rule remembered: that is how a\nMarkdown fence such as ` ```ts ` highlights its body as TypeScript. `holes` marks regions of\nthe body that belong to the host grammar instead: the embedded language reads across them\nas if each were a name, so its state carries over, and the host grammar tokenizes each hole.\nA PHP template's `<script>` uses it for `<?= $x ?>`, which keeps `\"<?= $name ?>\"` one string.\nHole patterns may contain capture groups. An end marker inside a hole does not close the embedded body.\n\nLines end at `\\n` (or `\\r\\n`) and nowhere else: the compiler rewrites `$` and `.` so a lone\n`\\r` or a U+2028 inside a string literal cannot end it early, as JavaScript's `m` flag would.\n\nThe test suite asserts, for every language and every sample, that emitted tokens\nreconstruct the source exactly, that scopes come from the shared vocabulary, and that\ntokenizing every truncated prefix terminates and stays consistent — which is what an editor\ndoes on every keystroke.\n\n## Replacing `@scalar/code-highlight`\n\n`@scalar/highlight/compat` is a drop-in `syntaxHighlight`. Same signature, same\n`<pre><code class=\"hljs language-x\">` envelope, same `hljs-*` token classes — so\n[`code.css`](https://github.com/scalar/scalar/blob/main/packages/code-highlight/src/css/code.css)\nkeeps working unchanged and `ScalarCodeBlock` needs one import line changed:\n\n```diff\n-import { standardLanguages, syntaxHighlight } from '@scalar/code-highlight';\n+import '@scalar/highlight/all';\n+import { standardLanguages, syntaxHighlight } from '@scalar/highlight/compat';\n```\n\n`standardLanguages` is re-exported with the same key set, so `StandardLanguageKey` is\nunchanged and the component's props keep their types.\n\n### What it covers, and what it does not\n\n`@scalar/code-highlight` is two packages wearing one name. The compat layer replaces the\nfirst half only:\n\n| export | status |\n| --- | --- |\n| `syntaxHighlight` | covered |\n| `standardLanguages` | key-compatible; 49 of 50 names have a grammar |\n| `basicLanguages`, `jsonYamlLanguages` | **not covered** — never exported here |\n| `lowlightLanguageMappings` | covered |\n| `htmlFromMarkdown`, `getHeadings`, `splitContent`, `isHeading`, `textFromNode` | **not covered** |\n| `rehypeHighlight`, `rehypeAlert` | **not covered** |\n\nThe Markdown half is a remark/rehype pipeline — GFM, sanitization, GitHub alerts, external\nlinks — that has nothing to do with tokenizing code, and it is not something this library\nshould grow. A swap keeps `@scalar/code-highlight` as a dependency for\n`ScalarMarkdown` and drops it from `ScalarCodeBlock`.\n\nThe one `standardLanguages` name with no grammar — `plaintext` — renders as escaped,\nunhighlighted code, which is exactly what the lowlight pipeline already does for a language\nit cannot resolve. `curl` resolves to the Bash grammar, since a curl invocation is a shell\ncommand line; the `language-curl` class `code.css` targets is unaffected, because that\nclass comes from the name the caller asked for.\n\n### Verifying it\n\n[`src/compat/compat.test.ts`](src/compat/compat.test.ts) runs the real lowlight pipeline —\nimported straight from [`@scalar/code-highlight`](../code-highlight) — beside ours over the\nshared sample corpus, and asserts that the rendered text, the `<code>` envelope and the line\nelements match exactly. It also ports the four assertions `@scalar/code-highlight` ships\ntoday. Because the comparison runs against the workspace package rather than a copy of it,\na change on either side shows up here.\n\nColour is the part that does *not* match exactly, and `pnpm compat:report --detail`\nquantifies it: across the whole 42-sample corpus 68.6% of visible characters keep the colour\n`code.css` gives them, and 82% across the thirteen languages the corpus started with. The\nrest is our finer scope vocabulary showing through — f-string interiors scoped as code\nrather than string, docstrings as comments rather than strings, punctuation given its own\nscope — and it is widest where highlight.js scopes least, as on `http`, where it leaves\nheader values, `#` comments and status numbers unstyled. Each round of grammars keeps its\nown floor — the whole corpus, the twenty-six samples before the latest round, and the\noriginal thirteen — so a new language cannot dilute a regression in an older one.\n\nFor the same three languages `ScalarCodeBlock` shows most often:\n\n| | gzipped |\n| --- | ---: |\n| `@scalar/code-highlight` | 127.58 KB |\n| `@scalar/highlight/compat` | 7.67 KB |\n\n## Trade-offs\n\n**It emits more markup.** Punctuation, operators and brackets get their own scopes rather\nthan inheriting the foreground, which is roughly 45% of the spans. That is the deliberate\ncost of the way it looks. If you want it back, drop the punctuation rules from a grammar —\nit is data.\n\n**Hand-written grammars are approximations.** A tokenizer built on real TextMate grammars\nwill get things right on unusual syntax that these do not. The trade is startup cost and\nbundle weight, and this library sits at the small end of it.\n\n**Python's heuristics are heuristics.** Keyword arguments are told from assignments by PEP 8\nspacing (`f(x=1)` versus `x = 1`); a triple-quoted string at the start of a line is treated\nas a docstring; `CapWords` reads as a type and `SCREAMING_CASE` as a constant. These are\nright on ordinary code and wrong on code written to defeat them.\n\n**Embedding needs the embedded language registered.** Some grammars hand part of their input\nto another grammar, when that one is registered:\n\n- `<script>` and `<style>` bodies in HTML (and so in XML, SVG and Vue) and in PHP templates go\n  to JavaScript and CSS.\n- A Markdown fence goes to the language it names, front matter to YAML, and HTML at the start\n  of a line to HTML.\n- An HTTP body that starts with `<` goes to HTML.\n\nWhen the grammar is not registered, the body is a plain string or unscoped text. A fence of four\nor more backticks stays a plain string either way, so a block that shows ` ``` ` inside it\nkeeps closing on its own run. HTML in Markdown takes its line, or a `<script>`, `<pre>` or\n`<style>` block to its closing tag, rather than running to the next blank line as CommonMark\nsays: MDX and most docs renderers read Markdown inside components.\n\n**No automatic language detection.** Pass a language name. Detection means shipping every\ngrammar, which is the thing this library exists to avoid.\n\n## Development\n\nFrom the repository root:\n\n```bash\npnpm install\npnpm vitest packages/highlight --run       # the suite\npnpm --filter @scalar/highlight build      # tsc, plus a copy of style.css\npnpm --filter @scalar/highlight types:check\n```\n\nFrom this directory:\n\n```bash\npnpm bench          # throughput per language, for comparing a branch against main\npnpm size           # bundle size per entry point and per language\npnpm compat:report  # @scalar/code-highlight swap report; --detail for colour drift\n```\n\nThe published package ships zero dependencies. `rolldown` measures bundle size and\n`highlight.js` supplies the reference grammars the compat tests differ against; both are\ndevDependencies and neither reaches consumers.\n\nRepository-wide conventions live in the root [`AGENTS.md`](../../AGENTS.md).\n\n## Community\n\nWe are API nerds. You too? Let's chat on Discord: <https://discord.gg/scalar>\n\n## License\n\nThe source code in this repository is licensed under [MIT](https://github.com/scalar/scalar/blob/main/LICENSE).\n","readmeFilename":""}