Last updated:
What is software metadata?
Software metadata is structured data that provides information about a software application, its components, and its behaviour. It describes various attributes of the software, including:
- Authors: details about the developers or organisations that created the software.
- Build & runtime information: includes details like operating system compatibility, architecture (e.g., 32-bit or 64-bit), and runtime requirements.
- Dependencies: lists required libraries, frameworks, or other software needed for proper functioning.
- Description and keywords: details about what the software tool does, its features and purpose.
- License: specifies the software license (e.g., MIT, BSD, GPL, proprietary).
- Name & version: identifies the software and its release version.
- Support and maintenance information: contact details to get support and questions answered.
Considerations
Providing metadata with your software is important because it provides the crucial context and (typically machine readable) information about your software and its components, enhancing its discoverability, reusability and interoperability with other tools. Software metadata is key to addressing many of the FAIR principles.
The type of metadata you need from software depends on your specific use case.
- If your main focus is academic credit for software, citation metadata is most important.
- If you’re aiming to replicate an analysis, versioning and dependencies matter more than authorship or titles.
- If you’re searching for new software suited to a particular task, keywords and descriptions are most relevant.
Often, developers of research software, repositories that host it, and users have multiple objectives—sometimes balancing several of these needs at once.
Solutions
Include a metadata file together with your source code files. There are various kinds of software metadata standards with slightly different purposes and use cases, some of which are listed below.
General software metadata standards, for example:
- CodeMeta – a community standard JSON-LD metadata format for describing software projects to support the preservation, discovery, reuse, and attribution of research software. See our dedicated page for learning how to add a CodeMeta file in you repository.
- Citation File Format a metadata file for supporting software citation purposes. See our dedicated page for learning how to add a CFF file in your code repository.
- SPDX – used for documenting software licenses, components, and security information.
- Dublin Core – a general purpose metadata standard and vocabulary for describing resources of any type (first developed for describing web content in the early days of the World Wide Web), now often used for software documentation.
- Schema.org – promotes schemas for structured data on the Internet including software applications and digital assets, e.g. BioSchemas Computational Tool profile enables you to describe how to run software, including its input and output parameters.
Software development, build, package and dependency metadata helps developers track software versions, dependencies, and compatibility, making development, running and maintenance easier. For example:
- PyPI metadata (Python) -
setup.pyandpyproject.tomldefine package metadata for Python packages and projects. pom.xml(Maven – Java) - defines project dependencies, build configurations, and plugins in Java projects.package.json(Node.js / npm) - manages dependencies, scripts, and metadata for JavaScript projects.Cargo.toml- manages dependencies, scripts, and metadata for Rust projects.Project.toml- manages dependencies, scripts, and metadata for Julia projects.DESCRIPTION- manages dependencies, scripts, and metadata for R projects.composer.json- manages dependencies, scripts, and metadata for PHP projects.- interoperability & integration metadata (e.g. BioSchemas Computational Tool profile) - facilitates communication between different software components, ensuring they work together without conflicts.
Software container & deployment metadata helps automate builds, testing, and deployment by providing necessary configuration details. For example:
- SBOM (Software Bill of Materials) – a comprehensive list of all components and dependencies in a software product.
- Open Container Initiative (OCI) Image Specification – standard metadata format for container images, including layers, dependencies, and authorship.
- Dockerfile - defines base images, environment variables, and configurations for containerised applications.
- Kubernetes metadata - provides metadata for managing deployments, services, and pods in Kubernetes clusters.
Tool- or Domain-Specific Tasks
This is a suggested list tool-specific sub-tasks to have a look at.
Related pages
Training
Tools and resources on this page
| Tool or resource | Description | Related pages |
|---|---|---|
|
CodeMeta |
CodeMeta is a community standard and initiative focused on creating a minimal metadata schema for scientific software and code, promoting their findability, preservation, and reuse through machine-readable metadata in JSON-LD format. | Phoenix2 Creating software meta... Credit and recognition... Adopting FAIR research... Software identifiers |
|
SPDX |
System Package Data Exchange (SPDX) is an open standard for representing systems with software components as SBOMs (Software Bill of Materials) and other AI, data and security references supporting a range of risk management use cases. | Licensing software |