programmingLanguage
programmingLanguage · No Google docs page
Appears in
What is it?
programmingLanguage declares which programming language a software project is written in. It accepts either a plain text string like "Python 3" or a structured ComputerLanguage object with a name and URL. When a repository uses multiple languages or targets multiple runtime versions, the field takes an array.
Why this matters for AEO
Developers frequently ask AI engines questions filtered by language: "best Python library for HDF5," "R packages for CodeMeta generation." A programmingLanguage value in SoftwareSourceCode markup gives AI systems a structured, unambiguous signal to match projects against language-specific queries. Without it, AI engines must infer the language from file extensions or README text, which is less reliable.
What the specs say
Schema.org: ComputerLanguage or Text. The computer programming language. schema.org/programmingLanguage
Google: No dedicated Google structured data page exists for SoftwareSourceCode or programmingLanguage. Google does not offer rich results for this type.
How to find your value
- GitHub — The colored language bar at the top of the repository page
- Package manager — The "Language" or "Platform" field on PyPI, npm, or CRAN
- CI config — The
language:key in.travis.ymlor the runtime inDockerfile - setup.py / setup.cfg — The
python_requiresorclassifiersfields - DESCRIPTION file (R) — The file itself confirms the project is written in R
Format and code
Type: ComputerLanguage or Text
Plain text (simplest):
{
"@context": "https://schema.org",
"@type": "SoftwareSourceCode",
"name": "h5RDMtoolbox",
"programmingLanguage": "Python 3"
}
ComputerLanguage object (more precise):
{
"@context": "https://schema.org",
"@type": "SoftwareSourceCode",
"name": "codemetar",
"programmingLanguage": {
"@type": "ComputerLanguage",
"name": "R",
"url": "https://r-project.org"
}
}
Multiple versions as an array:
{
"@context": "https://doi.org/10.5063/schema/codemeta-2.0",
"@type": "SoftwareSourceCode",
"name": "h5RDMtoolbox",
"programmingLanguage": [
"Python 3",
"Python 3.9",
"Python 3.10",
"Python 3.11",
"Python 3.12",
"Python 3.13"
]
}
Common mistake: listing framework names (Django, React) instead of the programming language itself. programmingLanguage should be the language (Python, JavaScript), not the framework built on top of it.
Webflow implementation
Static pages
For an open-source project page, add to Page Settings > Custom Code > Before </head>:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareSourceCode",
"name": "Your Project",
"programmingLanguage": "TypeScript",
"codeRepository": "https://github.com/your-org/your-repo"
}
</script>
CMS template pages
If a Webflow CMS collection has a "Language" plain text field:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareSourceCode",
"name": "{{wf {"path":"name","type":"PlainText"} }}",
"programmingLanguage": "{{wf {"path":"language","type":"PlainText"} }}"
}
</script>
In Schema HQ
Field mapping pulls Webflow CMS text field to programmingLanguage when generating SoftwareSourceCode markup. For projects using multiple languages, a comma-separated CMS field can be split into an array during publishing.
Real examples
h5RDMtoolbox (Karlsruhe Institute of Technology) (codemeta.json):
{
"@type": "SoftwareSourceCode",
"name": "h5RDMtoolbox",
"programmingLanguage": [
"Python 3",
"Python 3.9",
"Python 3.10",
"Python 3.11",
"Python 3.12",
"Python 3.13"
]
}
Lists every supported Python version as separate array entries, giving package managers and search tools precise compatibility data.
codemetar (rOpenSci) (codemeta.json):
{
"@type": "SoftwareSourceCode",
"name": "codemetar",
"programmingLanguage": {
"@type": "ComputerLanguage",
"name": "R",
"url": "https://r-project.org"
}
}
Uses a ComputerLanguage object with a url pointing to the language's official site, which gives machines a resolvable identifier for the language.
Related fields
FAQ
Should I use a text string or a ComputerLanguage object?
A plain text string like "Python 3" is valid and simpler. A ComputerLanguage object adds a url that resolves to the language's official site, which provides stronger disambiguation for machines. For most cases, plain text is sufficient. Use ComputerLanguage when precision matters (academic metadata, FAIR data compliance).
Can I list multiple programming languages?
Yes. Use a JSON array. This is common for projects that span multiple languages (e.g., a Python library with C extensions, or a full-stack project with TypeScript and Go). Each entry can be a string or a ComputerLanguage object.
What is the difference between programmingLanguage and runtimePlatform?
programmingLanguage identifies the language the code is written in (Python, R, Rust). runtimePlatform identifies the execution environment (Node.js, .NET CLR, JVM). A Java project would have programmingLanguage set to "Java" and could have runtimePlatform set to "OpenJDK 17".