Open Research Data
GitHub Template for FAIR and Open Research Data
Transforming research documentation from static afterthought into living, executable environments.
This template provides an infrastructure for documenting, publishing, and archiving research data in line with the principles of FAIR and open science. It is independent of data type or format and implements best practices as outlined in The Turing Way. Core components include automated release management, integrated archiving with Zenodo, structured documentation via Quarto, and long-term accessibility through GitHub Pages.
[!IMPORTANT] This
README.mddescribes the template repository itself. If you created a new repository from this template, start with TODO.md, then customize the project-facing template files: CITATION.template.cff, CODE_OF_CONDUCT.template.md, SECURITY.template.md, README.template.md, and CHANGELOG.template.md, and rename them into place as directed there.
๐ค Academic Recognition
This approach was presented at the Digital Humanities Tech Symposium (DHTech) 2025 and exemplifies how reusable templates can address persistent challenges in research data management.
Mรคhr, M., & Twente, M. (2025). One Template to Rule Them All: Interactive Research Data Documentation with Quarto. Digital Humanities Tech Symposium, NOVA University Lisbon. https://maehr.github.io/one-template-to-rule-them-all/.
Why use a template (even for small datasets)?
Conventional data publication as static supplementary files offers limited reproducibility and reusability. This template extends such practices by providing:
- ๐ Executable narratives that embed code outputs directly into documentation
- ๐ Automated deployment and testing that reduces technical overhead
- ๐๏ธ Integrated archiving with DOI through seamless Zenodo integration
- ๐ Scalability and consistency across diverse project types and domains
- ๐ Enhanced security with automated vulnerability monitoring
- ๐ค Community standards following accepted ethics and collaboration practices
Features
Open Research Data
- Citable via the template DOI, the live CITATION.cff, and the downstream CITATION.template.cff
- Automatic long-term archiving with Zenodo, plus a commit-ready rendered site archive for tagged snapshots
- Licensed under AGPL 3.0 and CC BY 4.0 according to The Turing Way
- Template for reporting data issues via
github/ISSUE_TEMPLATE/data_issue_report.yml
Documentation
README.mdfollowing www.makeareadme.com and The Turing WayCHANGELOG.mdfor template release notes andCHANGELOG.template.mdas the downstream project scaffold- Automated changelog generation with git-cliff
- Machine-readable project metadata in
package.jsonwith npm - Accessible documentation with GitHub Pages and Quarto
Consistency
- Code formatting with Prettier for general files, Ruff for Python, and styler and lintr for R
- Python type checking with ty
- Python dependency management with uv
- R dependency management with renv
- Commit messages following Conventional Commits enforced via prek
- Versioning following Semantic Versioning
- Workflow based on fork and pull with GitHub branch protection
- Issue tracking via issue templates
- File and folder naming conventions following The Turing Way
Security
SECURITY.mdfollowing GitHub guidelines, withSECURITY.template.mdfor downstream projects- Vulnerability monitoring with GitHub Security Alerts
- Repository integrity enforced via GitHub branch protection
Ethics
CODE_OF_CONDUCT.mdfollowing the Contributor Covenant, withCODE_OF_CONDUCT.template.mdfor downstream projects
Selected Use Cases
The template has been applied across domains including public history, political science, digital humanities, and teaching infrastructures. The examples below come from the โOne Template to Rule Them Allโ presentation and now call out the parts that coding agents can help automate.
๐ฌ Research Data Documentation
| Project | Preview |
|---|---|
| Stadt.Geschichte.Basel RDM Project documentation platform combining research data management with public history outreach; agents can update metadata, maintain setup checklists, and validate publication-ready docs. |
![]() |
| sgb-figures Reproducible code and annotated data for publication-ready visualisations of research data; agents can keep captions, changelog entries, and formatting in sync with analytical updates. |
![]() |
๐ Reproducible Research Workflows
| Project | Preview |
|---|---|
| nordatlantisk-ft Voting records from the parliament of Denmark with complete data scraping and analysis pipeline; agents can scaffold scrapers, refresh documentation, and run formatting before release. |
![]() |
| maxvogt-analysis Multi-step data compilation workflow documentation; agents can keep processing notes, metadata edits, and changelog updates aligned across the pipeline. |
![]() |
| Modelling Marti Topic modeling project with interactive visualizations and multimedia content as narrative elements; agents can automate notebook-to-doc updates, link checks, and release preparation. |
![]() |
๐ Academic Events & Teaching
| Project | Preview |
|---|---|
| Digital History Switzerland 2024 Conference website with program, abstracts, and participant information; agents can batch-edit schedules, validate links, and keep publication assets consistent. |
![]() |
| Digital Humanities Bern Department hub featuring news, events, and course information; agents can maintain navigation, announcement pages, and formatting checks for multi-page sites. |
![]() |
| Decoding Inequality 2025 University course website with syllabus and materials; agents can help update teaching materials, sync metadata, and prepare changelog-ready release notes. |
![]() |
๐ Living Publications & Handbooks
| Project | Preview |
|---|---|
| Non-discriminatory Metadata Comprehensive handbook that functions as both documentation and scholarly publication; agents can keep long-form docs, citations, and accessibility checks aligned. |
![]() |
| One Template to Rule Them All This repositoryโs own presentation site, demonstrating meta-application; agents can reuse the same setup, validation, and publication workflow documented in this template. |
![]() |
Installation
We recommend using GitHub Codespaces for a reproducible setup.
Getting Started
Prek Git Hooks
This template uses Prek for managing Git hooks with a pre-commit-compatible configuration. To install hooks locally:
npm install
npm run prepareTo run all hooks on demand:
prek run --all-filesIf Prek is not installed globally, you can run:
npx @j178/prek run --all-filesFor Most Users: Reproducible Setup with GitHub Codespaces
Use this template for your project in a new repository on your GitHub account.

Click the green
<> Codebutton at the top right of this repository.Select the โCodespacesโ tab and click โCreate codespace on
mainโ. GitHub will now build a container that includes:- โ
Node.js (via
npm) - โ
Python with
uv - โ
R with
renv - โ Quarto

- โ
Node.js (via
Once the Codespace is ready, open a terminal and preview the documentation:
uv run quarto preview
Note: All dependencies (Node.js, Python, R, Quarto) are pre-installed in the Codespace.
๐ฉโ๐ป Advanced Local Installation
Prerequisites
- Node.js
- R and Rtools (on Windows)
- uv (Python manager)
- Quarto
Note:
uvinstalls and manages the correct Python version automatically.
Local Setup Steps
# 1. Install Node.js dependencies
npm install
npm run prepare
# 2. Setup Python environment
uv sync
# 3. Setup R environment
Rscript -e 'install.packages("renv"); renv::restore()'
# 4. Preview documentation
uv run quarto previewProject Setup
After creating your project from this template (either via Codespaces or local setup), follow the comprehensive checklist in TODO.md to customize and finalize your project. The checklist includes essential setup tasks, optional enhancements, and verification steps to ensure your research data repository is properly configured.
If you want a coding agent to help, point it to .github/copilot-instructions.md first and then ask it to work through the checklist items marked as agent-assisted.
| Setup step | Typical owner | References |
|---|---|---|
| Replace placeholders, customize metadata, and update documentation | ๐ค Agent-assisted | TODO.md, .github/copilot-instructions.md |
| Run formatting, changelog, preview, and validation commands | ๐ค Agent-assisted | Use, .github/template-site/agent-release-workflow.qmd |
| Enable GitHub Security, Branch Protection, Pages, and Zenodo settings | ๐ค Manual in GitHub/Zenodo | TODO.md |
| Approve the final release and publish production artifacts | ๐ค Shared: agent prepares, maintainer confirms | .github/template-site/agent-release-workflow.qmd |
Use
Check that all files are properly formatted.
npm run checkFormat all files with Prettier.
npm run formatFormat all Python files with Ruff and lint with ty (if applicable).
uv run ruff format
uv run ruff check
uv run ty checkFormat all R files with styler and lint with lintr.
styler::style_dir(".")
lintr::lint_dir(".")Run the wizard to write meaningful commit messages.
npm run commitFor agent workflows, prefer one focused commit per logical change so git-cliff can turn the Conventional Commit subject into a short changelog line without extra cleanup. Multi-line commit messages are now truncated to their first line in changelog output, so keeping the subject specific is what matters most.
Run the wizard to draft changelog entries.
npm run changelogFor repositories created from this template, curate the result in CHANGELOG.template.md and rename it to CHANGELOG.md during finalization.
If you only need a compact preview while iterating with a coding agent, use:
npm run changelog:unreleasedIf your clone is shallow, fetch the full history first so the generated changelog reflects the history you want to summarize:
git fetch --tags --unshallow originPreview the documentation.
quarto previewCheck for broken links in the source documentation with Lychee.
Lychee is a Rust-based CLI tool. Install it first:
- macOS:
brew install lychee - Linux:
cargo install lychee - Other: See lychee.cli.rs
Then run the link check:
npm run lychee-checkPrepare a Zenodo-friendly site archive before creating a GitHub release.
npm run site:build
npm run site:archive -- --tag v1.0.0Or run the combined helper, which builds the site, creates release-artifacts/site-v1.0.0.zip, and stages the archive directory for commit:
npm run release:prepare -- --tag v1.0.0
npm run commitCommit the generated archive before you publish the GitHub release. Zenodo captures files that are already in the tagged repository snapshot, while the release workflow only mirrors the same ZIP onto the GitHub release page for convenient downloading.
If you change Quartoโs output directory from _site, pass the matching folder with --site-dir, for example npm run site:archive -- --tag v1.0.0 --site-dir site.
Support
This project is maintained by @maehr. Please understand that we canโt provide individual support via email. We also believe that help is much more valuable when itโs shared publicly, so more people can benefit from it.
| Type | Platforms |
|---|---|
| ๐จ Bug Reports | GitHub Issue Tracker |
| ๐ Report bad data | GitHub Issue Tracker |
| ๐ Docs Issue | GitHub Issue Tracker |
| ๐ Feature Requests | GitHub Issue Tracker |
| ๐ก Report a security vulnerability | See SECURITY.md |
| ๐ฌ General Questions | GitHub Discussions |
Template roadmap
v1.0.0 release readiness
Post-v1.0.0
Contributing
Please see CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
License
The data in this repository is released under the Creative Commons Attribution 4.0 International (CC BY 4.0) License - see the LICENSE-CCBY file for details. By using this data, you agree to give appropriate credit to the original author(s) and to indicate if any modifications have been made.
The code in this repository is released under the GNU Affero General Public License v3.0 - see the LICENSE-AGPL file for details. By using this code, you agree to make any modifications available under the same license.









