Quarto + Positron + GitHub + Zenodo
University of Waikato | ScienceEcosystem.org
2026-08-03
“Wait — which script made this number again?”
Six months after submission. Sound familiar?
The problem: nobody teaches you how to actually do this
| Tool | Purpose |
|---|---|
| Quarto | Write manuscript + analysis together |
| Positron | IDE with built-in Git support |
| GitHub | Host code, give reviewers access |
| renv | Record exact R package versions |
| Zenodo | Permanent archive + citable DOI |
All free. All open source.
Bonus: proper LaTeX typesetting, one-line CSL swap to match any journal’s citation style, ORCID metadata flowing straight into the output — for free, not extra work.
renv::init() + renv::snapshot()my_paper/
├── _quarto.yml
├── index.qmd
├── analysis.qmd
├── data/
│ ├── raw/ # NEVER modify
│ └── derived/
├── outputs/
│ ├── figures/
│ └── tables/
├── references/
└── README.md
.gitignore keeps outputs/, raw data, and OS files out of version control — total time: ~20 minutes
analysis.qmdAll your R code
Renders to HTML
index.qmdYour clean manuscript
Renders to HTML / PDF / Word
Both version controlled together on GitHub
Quarto can pull real numbers straight from your analysis into your prose — no more hand-typing a mean or p-value into the manuscript.
Rendered output Carapace length differed significantly by shelter type (mean stone = 34.2 mm, p = 0.003).
Re-render → the manuscript updates itself. Change your model, get a new number for free.
In the Positron Source Control panel:
Work → Stage (+) → Commit (✓) → Sync (↑)
Good commit messages “added linear model for shelter preference”
“fixed figure 3 axis label”
“updated discussion after reviewer 2 comment”
Bad commit messages “update”
“fix”
“changes”
“final version 3”

You need the DOI in the manuscript before submission, but you do not want to lock the version until after revisions.
The solution: Zenodo lets you reserve a DOI without publishing
Reserve DOI → submit → revise → accept → publish
↑ ↑
DOI exists DOI goes live
(not public yet) (permanently locked)

Reviewers reach your code via the public GitHub URL — mention it in your cover letter, not just the data availability statement. Double-blind? Use an Anonymous GitHub mirror instead.
Defaults that satisfy nearly every journal/funder:
CC BY 4.0 The default for data — reuse allowed, attribution required
MIT The default for code — permissive, minimal restrictions
CC BY-NC Blocks commercial use, if that matters for your work
GPL Keeps derivatives open-source too
A license controls reuse, not access — it doesn’t hide anything
Sensitive data (privacy, sovereignty, endangered species locations)? Use Zenodo’s access right setting: Open, Embargoed, or Restricted (metadata public, files require your approval) — not a stricter license.
"final version — accepted by [Journal]"v1.0
Zenodo automatically archives the release and locks the DOI
The published DOI never moves.
Concept DOI vs. version DOI — that’s the anchor everything else hangs off.
Missing renv.lock → v1.1
→
Reviewer question answered → v1.2
→
Next season’s data → v1.3
The hard call isn’t technical — it’s deciding when a change is a new version of this paper versus when it’s actually a new paper.
Olivier V. Raven
University of Waikato | ScienceEcosystem.org
olivierraven.github.io/Open_Research_Workflow
Full guide, further reading, and this deck’s own source — all at the link above.
Open Research Workflow | olivierraven.github.io/Open_Research_Workflow | CC BY 4.0