On this page:
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.

programmingLanguage

programmingLanguage · No Google docs page

Appears in

SoftwareSourceCode

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.yml or the runtime in Dockerfile
  • setup.py / setup.cfg — The python_requires or classifiers fields
  • 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 {&quot;path&quot;:&quot;name&quot;,&quot;type&quot;:&quot;PlainText&quot;} }}",
  "programmingLanguage": "{{wf {&quot;path&quot;:&quot;language&quot;,&quot;type&quot;:&quot;PlainText&quot;} }}"
}
</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".

On this page:
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.

Need help with schema on your site?

We implement structured data for Webflow sites — from audit to deployment.

Work with us

Work with us