| Standard | Format | Purpose | Best For |
|---|---|---|---|
| CodeMeta | JSON-LD | Software metadata vocabulary bridge | Registry indexing, discovery |
| CFF | YAML | Software citation format | Human editing, version control |
| Schema.org | JSON-LD / Microdata | Semantic web markup | Web search indexing |
| Zenodo | JSON metadata | Research data archival | DOI assignment, preservation |
| SWH | Proprietary | Code preservation | Long-term archival, provenance |
```
1. name - Software title
2. description - What it does
3. version - Version number (semantic)
4. authors - Who created it
5. licenses - Legal terms (SPDX)
6. codeRepository - Where code lives
7. url - Project website
8. datePublished - Release date
9. identifier - DOI or UUID
10. keywords - Subject tags
- Languages used - Dependencies - Runtime environment (Python 3.8+) - Supported OS (Linux, Windows, macOS) - CPU architecture (x86_64, ARM) - RAM needed - Disk space - How to build - CI/CD URL (GitHub Actions, Travis) - Bug tracking (GitHub Issues) - active/inactive/abandoned - People responsible for maintenance - Testing tool (pytest, Jest) - Build tool (setuptools, Maven) - Academic papers describing it - How to cite it - Works it builds on - Related papers - Associated datasets - Grant info - Funding organizations - SPDX license IDs (MIT, Apache-2.0, GPL-3.0) - Full license text URL - Who owns copyright - Copyright year - Rights statement
name CFF CodeMeta Schema.org Zenodo SWH
description ✓ ✓ ✓ ✓ ✓
version ✓ ✓ ✓ ✓ ✓
datePublished - ✓ ✓ ✓ ✓
authors ✓ ✓ ✓ ✓ ✓
licenses ✓ ✓ ✓ ✓ ✓
identifier ✓ ✓ ✓ ✓ ✓
url ✓ ✓ ✓ - ✓
codeRepository ✓ ✓ ✓ ✓ ✓
keywords ✓ ✓ ✓ ✓ -
`
Fields unique to one standard
`
CodeMeta: buildInstructions, continuousIntegration, developmentStatus
CFF: message, preferredCitation, repositoryArtifact
Schema.org: applicationCategory, encoding
SWH: provenanceOrigin, swhHash, archiveUrl
Zenodo: zenodoRecordId, accessRights
`
Quick Conversion Guide
CITATION.cff → CodeMeta
`
cff.title → codemeta.name
cff.abstract → codemeta.description
cff.authors → codemeta.author
cff.version → codemeta.version
cff.date-released → codemeta.datePublished
cff.repository-code → codemeta.codeRepository
cff.license → codemeta.license (SPDX)
cff.keywords → codemeta.keywords
cff.identifiers → codemeta.identifier
`
CodeMeta → CFF
`
codemeta.name → cff.title
codemeta.description → cff.abstract
codemeta.author → cff.authors
codemeta.version → cff.version
codemeta.datePublished → cff.date-released
codemeta.codeRepository → cff.repository-code
codemeta.license → cff.license
`
CodeMeta → Zenodo
`
codemeta.name → title
codemeta.author → creators
codemeta.description → description
codemeta.version → version
codemeta.datePublished → publication_date
codemeta.license → license (SPDX)
`
Common SPDX Licenses
`
MIT - Permissive, simple
Apache-2.0 - Permissive, patent clause
GPL-3.0-or-later - Copyleft, require source sharing
BSD-3-Clause - Permissive, similar to MIT
LGPL-3.0-or-later - Weak copyleft, library-friendly
MPL-2.0 - Copyleft, file-level
AGPL-3.0-or-later - Strong copyleft, network clause
ISC - Minimalist, permissive
Unlicense - Public domain
CC0-1.0 - Public domain dedication
`
Tool: SPDX License List
Development Status Values
`
active - Actively developed, maintained
inactive - No longer maintained
suspended - Temporarily paused
abandoned - Abandoned by original authors
unsupported - No longer supported
moved - Moved to different location
concept - Early prototype/proof of concept
wip - Work in progress
`
Reference: repostatus.org
Semantic Versioning Format
`
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
1.0.0 - First release
2.1.0 - New features, backward compatible
2.1.1 - Bug fix, backward compatible
2.0.0 - Breaking changes
2.0.0-alpha.1 - Pre-release
2.0.0-rc.1 - Release candidate
2.0.0+build123 - Build metadata
`
Where to Put Metadata
CFF
`
File: CITATION.cff
Location: Repository root
Format: YAML 1.2
Tool: cffinit (web form)
Integration: GitHub native, Zenodo, Zotero
`
CodeMeta
`
File: codemeta.json
Location: Repository root or .codemeta/
Format: JSON-LD
Tool: CodeMeta Generator
Integration: Software Heritage, registries
`
Zenodo
`
File: .zenodo.json (optional)
Location: Repository root
Format: JSON metadata
Auto-parsed: From CITATION.cff or codemeta.json
DOI: Auto-assigned on release
`
Nested Objects (Complex Fields)
Person
`yaml
family-names: Smith
given-names: Jane
email: jane@example.org
affiliation: University of Example
orcid: https://orcid.org/0000-0001-2345-6789
`
Organization
`yaml
name: National Science Foundation
url: https://nsf.gov
identifier: https://ror.org/021nxhr62
`
ComputerLanguage
`yaml
name: Python
url: https://python.org
version: 3.8+
`
Citation (Reference)
`yaml
type: journal-article
title: Publication Title
authors: [...]
year: 2023
doi: 10.1234/example
journal: Journal Name
``
| Mistake | Fix |
|---|---|
| Using license name instead of SPDX | Use SPDX ID: "MIT" not "MIT License" |
| Version without semantic format | Use "2.0.4" not "version 2" or "v2" |
| Missing author email | Add contact email for citations |
| Dead URLs in references | Test all links before publication |
| Incomplete person info | Include givenName + familyName |
| Wrong date format | Use ISO 8601: YYYY-MM-DD |
| Outdated metadata | Keep files in version control |
| No identifier/DOI | Get DOI from Zenodo or DataCite |
| Forgetting license URL | Use SPDX or link to full text |
| Redundant fields | CFF/CodeMeta overlap intentionally |
Have you defined?
If you answered YES to all 7: You have minimum viable software metadata.
Add these for better discovery:
If you answered YES to most: You have publication-ready software metadata.
Last updated: April 4, 2026