Circlesquare: juggling DOIs when preprinting
Creators & Contributors
Here's a conundrum. When posting a new preprint, we typically have to juggle up to three DOIs (for the preprint, the code, and the data). How can we cross reference these DOIs?
The problem
- The preprint – The manuscript gets deposited to bioRxiv. It takes around 24 h to clear screening and is then assigned a DOI.
- The code – The code is maintained on GitHub and can be archived at zenodo to get a DOI. This step is not essential, but it is good practice to archive the version of code used in the paper. Obtaining a DOI is pretty much instantaneous.
- The data – Usually we have some data which is too big for a GitHub repo and so this needs to be deposited to zenodo separately. It therefore gets a DOI. This process is as simple as uploading the data and getting a DOI.
Ideally, we would reference the DOIs of the code and data in the paper, the DOIs of the paper and code in the dataset metadata, and the code should in turn reference the DOIs of the paper and data. How can we do this when none of the DOIs are known?
The solution
We could get DOIs for each item without cross referencing and then update each one with the other DOIs once they are all known. This is rather clunky and means that everything is on v2 before it has even been submitted to a journal.
An alternative is as follows:
- Upload the data to zenodo, but save the upload as a draft. This allows the DOI to be reserved. Now that this is known, the DOI can be added to the preprint and the code. One down, two to go.
- Now that the GitHub repo references the dataset, we can make this live on zenodo to get its DOI.
- This DOI can then be added to the preprint and to the dataset (which are still both in draft).
- Now we can post the preprint. Once we have the preprint DOI, we can add that to the dataset and make it live.
- Now, only one item is missing information – the code. The reference to the preprint can be added and a new version released from GitHub. The link in the preprint will still resolve so there’s no need to update that. At this point, everything links to everything else.
So the GitHub release to zenodo would be on v2 but everything else is v1. I think this is currently the best solution to this conundrum.
To fully square the circle, and have everything on v1, we would need to know the preprint DOI before releasing the GitHub repo (step 2). Then all items could reference each other. If you're feeling daring, it is possible to predict the DOI that would be assigned to the preprint because it is of a standard form. However, an error here would result in more updating.
This post is to help the future me remember what to do.
Here’s one more thing to help others.
I've archived many GitHub repos to zenodo but this was via my personal GitHub account. For our most recent paper I was using our lab GitHub account which is an "Organisation". Archiving involves flipping a switch in zenodo from a list of GitHub repos, but I couldn't see any repos from my lab organisation in the list.
I found the solution to not be very well documented. First, click on your account icon (top right) and then click Organizations. You should see the ones you are associated with. Click settings for the organization you need to access, and then on the left panel click OAuth app policy and approve access (you must be admin or owner to do this). Then, nothing happens! This is where the official instructions end.
Nothing happens because at this point there is nothing to approve since zenodo is not yet asking for access. Clicking sync on zenodo doesn't trigger a request. This was puzzling, but the solution is here:
https://github.com/zenodo/zenodo/issues/1814#issuecomment-620555444
You need to head to Applications under your personal account and you should see zenodo listed there. Click the name zenodo, and in there you should see a list of GitHub accounts you are associated with. From here you can request access. Once there is a green tick, you have made contact. You can now go to zenodo and click sync to see all the repos in this organisation. Finally, if the repo you want to release is missing but you see all the others from that Organization, this might be because it is private. You can only archive public repos.
—
The post title comes from “Circlesquare” by The Wonder Stuff from their Huff LP.
Additional details
Description
Here's a conundrum. When posting a new preprint, we typically have to juggle up to three DOIs (for the preprint, the code, and the data). How can we cross reference these DOIs?
Identifiers
- GUID
- https://quantixed.org/?p=3703
- URL
- https://quantixed.org/2026/02/17/circlesquare-juggling-dois-when-preprinting/
Dates
- Issued
-
2026-02-17T09:31:16
- Updated
-
2026-04-27T12:51:42