Skip to content
Reproducible Humanities Research

To archive code on Zenodo, connect your GitHub repository to Zenodo, flip the switch for that repository, then publish a GitHub Release — Zenodo automatically captures a snapshot and mints a DOI. You can also upload a zip directly through the Zenodo website. Either way you get a permanent, citable, version-pinned archive of your code that survives even if the original repository disappears, which is exactly what reproducible scholarship and many funders require.

This guide takes you through the whole workflow, the concept-versus-version DOI distinction, and the metadata that makes your deposit genuinely useful.

Why archive code on Zenodo rather than just leaving it on GitHub?

GitHub is a working platform, not an archive. Repositories get deleted, renamed, made private, or lost when an account closes; none of that is a stable foundation for a citation. Zenodo, run by CERN, is built for permanence: it assigns DOIs, preserves the exact bytes you deposited, and keeps them available for the long term independent of GitHub. Archiving there turns ephemeral code into a fixed scholarly object you can cite with confidence years later.

How do I set up the GitHub-to-Zenodo integration?

A one-time setup, then automatic forever:

  1. Log in to Zenodo with your GitHub account and authorise it.
  2. Go to your Zenodo GitHub settings and toggle the repository on.
  3. In GitHub, create a Release with a semantic tag.
bash
git tag -a v1.0.0 -m "First archived release: verified pipeline"
git push origin v1.0.0

When the Release publishes, Zenodo grabs a zip of that exact state and mints a DOI. Add the DOI badge Zenodo provides to your README so the citable archive is visible from the repository.

What is the difference between the concept DOI and the version DOI?

This trips people up, so be deliberate. Zenodo issues two kinds of DOI:

DOI typePoints toCite it when
Concept DOIalways the latest versionyou want a stable link to "the software" in general
Version DOIone specific releaseyou must pin the exact code behind a published result

For reproducibility, cite the version DOI in a paper, because it freezes the precise code you ran. Use the concept DOI in a README or general reference where "newest" is appropriate.

What metadata should I add to the deposit?

Zenodo pre-fills some fields, but a thoughtful record is far more findable and reusable. Before publishing, set:

  • Authors with ORCID identifiers and affiliations.
  • Title matching the software name and a clear description.
  • Licence — choose an open one such as MIT, BSD or Apache 2.0 for code.
  • Keywords a researcher would search.
  • Related identifiers — link the paper DOI as "is supplement to" so paper and code are connected.

A CITATION.cff in the repository keeps this metadata consistent and gives others a ready-made citation.

Can I archive without GitHub at all?

Yes. If your code lives outside GitHub, or you prefer a manual deposit, use the Zenodo web uploader:

bash
# Make a clean, dated archive of your code
git archive --format=zip --output=my-tool-v1.0.0.zip v1.0.0

Upload that zip to Zenodo, fill in the metadata, and publish. You get the same DOI and the same permanence. This is also the route for code in self-hosted GitLab or Mercurial.

How do I keep archived versions in sync as the project evolves?

Treat archiving as part of every meaningful release, not a one-off. Each new GitHub Release produces a new version DOI under the same concept DOI, building a tidy version history on Zenodo that mirrors your project's evolution. Always cite the version DOI that matches the state of the code at the time of a given output, and update your README's badge as needed. This keeps every published result tied to an exact, recoverable snapshot.

Key Takeaways

  • Zenodo is free CERN-run infrastructure that gives code a permanent, citable DOI independent of GitHub.
  • Connect the repository once, then each GitHub Release is archived and assigned a DOI automatically.
  • Cite the version DOI to pin exact code; use the concept DOI for a general "latest" reference.
  • Enrich the deposit with ORCID authors, an open licence, keywords and a link to the related paper.
  • You can deposit a zip directly through the Zenodo website without GitHub.
  • Archive every meaningful release so each published result maps to a recoverable snapshot.

Frequently Asked Questions

Is Zenodo free to use?

Yes. Zenodo is operated by CERN and funded as open infrastructure, with no charge to deposit, and it provides DOIs and long-term storage at no cost to depositors.

What is the concept DOI versus the version DOI?

Zenodo mints one concept DOI that always points to the latest version, plus a distinct DOI for each individual version. Cite the version DOI to pin an exact release.

Do I have to use GitHub to archive on Zenodo?

No. The GitHub integration is convenient but optional; you can upload a zip of your code directly through the Zenodo web interface and get the same DOI.

Can I archive software that is not open source?

You can deposit it, but Zenodo and reuse norms strongly favour an open licence. Choose a licence at deposit; closed deposits limit who can legitimately reuse the code.

What is the file-size limit on Zenodo?

The standard per-record limit is 50 GB, generous for code. For larger datasets you can request more, but code repositories almost never approach this ceiling.