gatsbyjs/gatsby · error · Error
Prism doesn't support language '${language}'.
Error message
Prism doesn't support language '${language}'. What it means
Thrown by loadPrismLanguage in gatsby-remark-prismjs when the requested language name or alias cannot be resolved to a known Prism language via getBaseLanguageName(). Prism's components registry has no matching entry or alias for the given string.
Source
Thrown at packages/gatsby-remark-prismjs/src/load-prism-language.js:24
if (components.languages[nameOrAlias]) {
return nameOrAlias
}
return Object.keys(components.languages).find(language => {
const { alias } = components.languages[language]
if (!alias) return false
if (Array.isArray(alias)) {
return alias.includes(nameOrAlias)
} else {
return alias === nameOrAlias
}
})
}
module.exports = function loadPrismLanguage(language) {
const baseLanguage = getBaseLanguageName(language)
if (!baseLanguage) {
throw new Error(`Prism doesn't support language '${language}'.`)
}
if (Prism.languages[baseLanguage]) {
// Don't load already loaded language
return
}
const languageData = prismComponents.languages[baseLanguage]
if (languageData.option === `default`) {
// Default language has already been loaded by Prism
return
}
if (languageData.require) {
// Load the required language first
if (Array.isArray(languageData.require)) {
languageData.require.forEach(loadPrismLanguage)View on GitHub (pinned to 8b06340921)
Solutions
- Verify the language name matches a Prism-supported language or alias (see prismjs/components).
- Correct typos in the code fence language identifier.
- Register the language via languageExtensions config if it requires a custom Prism component.
- Install additional prismjs language components if available.
Example fix
```javascrpit // before (typo) ``` ```javascript // after (correct name) ```
Defensive patterns
Strategy: validation
Validate before calling
// Validate language name against Prism's supported languages
const Prism = require('prismjs')
const components = require('prismjs/components')
const supported = new Set([...Object.keys(components.languages)])
if (!supported.has(language)) {
console.warn(`Language '${language}' not supported by Prism`)
} Type guard
const isSupportedPrismLanguage = (lang: string, components: any): boolean => {
if (components.languages[lang]) return true
return Object.values(components.languages).some((l: any) =>
Array.isArray(l.alias) ? l.alias.includes(lang) : l.alias === lang
)
} Try / catch
try {
loadPrismLanguage(language)
} catch (e) {
if (e.message.includes("doesn't support language")) {
// fallback: render as plain text
} else throw e
} Prevention
- Verify language names against the Prism components list before using in code fences.
- Register custom languages via languageExtensions if Prism doesn't bundle them.
- Add a markdown lint rule to catch unsupported language identifiers.
When it happens
Trigger: getBaseLanguageName(language) returns undefined because the language string is not a key in prismComponents.languages and is not listed as an alias of any language.
Common situations: A markdown code fence uses a language Prism doesn't bundle (e.g., a niche language), a typo in the language name (e.g., 'javascrpit'), or an alias not registered in the installed Prism version.
Related errors
- A languageExtension needs to be defined as an object. Given
- A languageExtension needs to contain 'language' and 'extend'
- ${REPORTER_PREFIX} Error in default page filter
- ${REPORTER_PREFIX} Error in custom page filter. If you've cu
- Invalid plugin options for "gatsby-plugin-sitemap":
AI-assisted analysis of gatsbyjs/gatsby@8b06340921 (2026-08-13).
Data as JSON: /api/errors/96e23887e98ffe7c.
Report an issue: GitHub.