Skip to content
PlagiatScanner.de
Research data · DAT-02

How to cite code and research software

Cite the specific software release that made a meaningful contribution to the research. Begin with the project’s preferred citation, then verify the developers, title, version, release year, object type and DOI or other persistent identifier. Explain configuration and use in the methods section. A paper about the software may be worth citing too, but it does not identify the executed code.

Software citation worksheetReviewed 4 September 2026

Identify software that materially shaped the work

Software belongs in the reference list when it performs a specialist role in collection, transformation, analysis, simulation or visualisation. That does not require a citation for every operating-system utility. Ask whether another researcher needs to identify the tool to understand the procedure, recognise a contributor or repeat the analysis. A statistical package, domain-specific parser, simulation library or custom analysis program often clears that threshold.

Citation and description do different jobs. The citation assigns credit and identifies an object; the methods record explains what you did with it. “Analysed in Python” does neither job well because it omits the packages, versions and configuration that produced the result. Conversely, placing every dependency in the bibliography can obscure the genuinely consequential components. Cite the substantive tools and preserve the full technical environment separately.

Look for the maintainers’ preferred citation

Check the project documentation, release page and repository for “Cite”, “Citation” or CITATION.cff. GitHub reads a CFF file in the repository root and can present its contents in common citation formats. Treat the output as structured source information, not an excuse to skip verification: make sure the displayed version corresponds to the code you ran. Some maintainers request both a software citation and a related paper. Include both only where each serves a distinct purpose.

If no recommendation exists, record the responsible developers or organisation, software title, exact release, year and persistent locator. A DOI is useful when a repository has archived a release. Software Heritage can identify archived source-code objects using SWHIDs. If the only evidence is a live repository, preserve a tag or full commit hash, repository URL and access date. A branch name alone is unstable because its pointer can move.

Authority asset: software citation and version example

Fill-in pattern: Developer or organisation. (Year). Software title (Version) [Computer software]. Publisher or archive. Persistent identifier.

Choose the record that matches the software object
SituationReference-list coreMethods evidence
Archived releaseCreators, year, title, version and release DOIModules, parameters, platform and input revision
Repository without a release DOICreators, title, tag or commit, repository and access dateInstall process, dependencies and any local modifications
Unpublished code written for the projectAuthor, title, internal version, status and controlled locationPurpose, files, tests, access boundary and preservation plan

Fictional example: Sample, A., & Example, B. (2026). TextMetric (Version 1.4.2) [Computer software]. Example Archive. https://doi.org/10.0000/textmetric.142. Methods note: “Tokenisation used TextMetric 1.4.2, module clean, configuration …; the environment file and input checksum accompany the analysis.”

The DOI above is deliberately fictitious. Replace every field with verified metadata from the real software record.

Release, commit and concept identifiers answer different questions

Choose the narrowest level that is both relevant and recoverable. If release 2.3 calculated the reported estimate, its version identifier is usually more useful than an identifier for the project across all releases. A concept DOI may be appropriate when discussing an evolving software family. Zenodo, for example, distinguishes the DOI for one version from a DOI representing all versions. Read the repository guidance rather than guessing from the identifier string.

A commit hash is precise within its repository but does not guarantee that the host will preserve the object indefinitely. Archiving a release adds managed metadata and a more durable retrieval route. For an online service that changes continuously, exact repetition may not be possible. In that case, state the provider, access date, visible service or model version, interface and key settings. Do not promise reproducibility where historical execution environments are unavailable.

Record the execution context in the method

Explain the role played by the software, its version, the modules used, consequential parameters and how outputs were checked. A scripted workflow benefits from a lockfile or dependency list, interpreter version, start command and random-seed record where relevant. A graphical workflow needs the selected filters, dialogue options and export settings. This separates your analytical choices from program defaults that might change later.

If you altered someone else’s code, identify the upstream release and your modifications separately. A fork with local patches is not the same object as the original package. Preserve a diff or archive your derived version where licensing, confidentiality and institutional policy permit. Attribution does not override the licence: permission to distribute, scholarly credit and methodological transparency are separate checks.

Make project code citable without exposing secrets

Give original analysis code a meaningful title, release number and README that states its purpose, prerequisites, entry point and expected output. A CITATION.cff record can hold creator names, ORCIDs, release date, version and DOI in a machine-readable form. Before depositing anything publicly, remove credentials, personal information, private server paths and third-party files you are not entitled to redistribute.

When open publication is impossible, the code can still have a stable identity. Use an institutional archive or controlled location, an internal version and a checksum, and state the conditions under which it may be inspected. “Available on request” is fragile when the responsible person later moves institution. A documented custody route and an honest list of withheld components are stronger evidence.

Five checks before you submit

  1. Does the cited release match logs, generated output or the environment file?
  2. Does the DOI or SWHID resolve to the exact object described?
  3. Have you respected a preferred citation while checking it against actual use?
  4. Can the methods record explain parameters, dependencies and local changes?
  5. If both software and paper are cited, does each support a separate claim?

Sources and technical standards

  1. GitHub Docs: About CITATION files – official documentation for CITATION.cff and generated citation formats.
  2. Software Heritage: SoftWare Hash IDentifier – persistent intrinsic identifiers for archived source code.
  3. Zenodo: Versioning FAQ – distinction between a release DOI and the concept DOI spanning versions.