WARNING: THIS REPOSITORY INCLUDES PUBLIC DATA. IT MUST NOT INCLUDE ANY PRIVATE INFORMATION SUCH AS CORRESPONDENCE WITH REVIEWERS OR AUTHORS.
This repository stores public R Journal and R News publication assets in a directory layout that can be validated and rendered as a Quarto website.
The main components are:
_articles/: one directory per scholarly article._news/: one directory per editorial, CRAN/Bioconductor note, conference report, or other news item._issues/: one directory per complete issue, including the issue source and complete-issue PDF._scripts/: scripts for validation, rendering, and website generation.docs/: the rendered website output to be published on Github PagesMakefile: a Makefile for running validation and rendering commands..nojekyll: otherwise Github Pages does not style the file properly.index.qmd,assets/,pages/: website pages and componentsstyle.css: website styling
Generated website files are disposable and should NOT be committed to the git repository: generated/, pages/, issues/, .
Create one directory under _articles/ named with the article slug:
_articles/<slug>/
<slug>.pdf # mandatory
<slug>.html # optional
<slug>.bib # optional
metadata.yaml # mandatory
archive.zip # mandatory
Use these slug patterns:
RJ-YYYY-NNNfor R Journal articles, for exampleRJ-2025-001.RN-YYYY-NNNfor legacy R News articles, for exampleRN-2005-001.
Directory components:
Mandatory
The public article PDF created using the Rmarkdown or LaTeX style sheet.
An HTML rendering of the article body.
Do NOT include headers or meta-data such as title, author, abstract, etc. This information is retrieved from metadata.yaml automatically when building the website. The HTML file should be minimalist, and only include the article body content, from the introduction to the references and endnoes.
Optional
A BibTeX entry for citing the article. When present, this file is published with the article assets and linked from the article page beside the PDF download. If it is absent, the website build can generate one from metadata.yaml.
Generate missing article BibTeX files in bulk with:
Rscript _scripts/generate_article_bib.RPublic metadata used for the article archive and issue grouping.
R Journal article metadata includes doi. Legacy R News article metadata must not include doi.
Mandatory
The public source bundle for the item. Save all public files, markup, images, and other assets used to generate <slug>.html and <slug>.pdf.
Do not include private correspondence, reviewer comments, author emails, or any other non-public material.
Create one directory under _news/ named with the news or note slug:
_news/<slug>/
metadata.yaml # mandatory
archive.zip # mandatory
<slug>.pdf # mandatory
<slug>.html # optional
Use these slug patterns:
RJ-YYYY-I-topicfor R Journal news and notes, for exampleRJ-2025-4-bioconductor.RN-YYYY-I-topicfor legacy R News items, for exampleRN-2001-1-editorial.
Here I is the issue number and topic is the short item label used in the archive. Existing migrated items keep their original source slugs.
Directory components:
Mandatory
The public PDF for the news item or note.
Optional
An HTML rendering of the item body.
Do NOT include headers or meta-data such as title, author, abstract, etc. This information is retrieved from metadata.yaml automatically when building the website. The HTML file should be minimalist, and only include the item body content. If this file is missing or empty, the generated page embeds <slug>.pdf.
Public metadata used for the news archive and issue grouping.
News metadata uses the same common fields as articles:
title:
abstract:
author:
date:
date_received:
journal:
firstpage:
lastpage:
volume:
issue:
slug:
packages:
cran:
bioc:
CTV:News items must not include doi. The volume, issue, and journal.firstpage fields determine which generated issue page the item appears on and where it appears in that issue. The news archive page at pages/news.qmd is generated from _news/*/metadata.yaml.
Mandatory
The public source bundle for the item. Save all public files, markup, images, and other assets used to generate <slug>.html and <slug>.pdf.
Do not include private correspondence, reviewer comments, author emails, or any other non-public material.
Other public assets can live beside these files and are copied to docs/_news/<slug>/, excluding metadata.yaml, archive.zip, and <slug>.html.
Complete issue files are stored in _issues/. Each issue has its own directory which follows this naming convention:
_issues/YYYY-I/
where YYYY is the calendar year and I is the issue number, for example _issues/2026-1/.
The issue directory includes three mandatory files:
_issues/YYYY-I/
YYYY-I.pdf # complete issue in a single PDF file
doi.xml # DOI deposit metadata
archive.zip # public source bundle
YYYY-I.yml # optional issue metadata, when available
Directory components:
Mandatory
The complete issue PDF in a single file.
Mandatory
The public DOI deposit metadata for the issue.
Mandatory
The public source bundle for the issue. Save all public files, markup, images, and other assets used to generate YYYY-I.pdf and doi.xml.
Do not include private correspondence, reviewer comments, author emails, or any other non-public material.
Optional
Legacy issue metadata. Keep this file beside YYYY-I.pdf when it is available.
Run validation after adding or changing article/news directories:
Rscript _scripts/validation.RThis writes:
validation_report.rdsvalidation_report.html
Render missing article/news HTML from archived sources with the Docker renderer:
_scripts/render_rmarkdown_to_html_v2.shThe script builds _scripts/render/docker/Dockerfile into rjournal-rmarkdown-renderer:v2 when the image is missing, asks the internal R renderer for pending items, and then creates one container per item with a [current/total] progress indicator. The image is based on rocker/r2u:24.04; standard render packages plus common article dependencies such as tidyverse, data.table, marginaleffects, modelsummary, and sf are installed as r2u apt packages. The image also installs rjournal/rjtools from GitHub. Docker render runs require and enable bspm before runtime package installs so missing CRAN dependencies are resolved through r2u binaries instead of compiling from source.
Use --workers=<n> or RJOURNAL_RENDER_DOCKER_WORKERS to run multiple item containers in parallel. The wrapper asks R for item directories that do not already have the expected <slug>.html file. RJOURNAL_RENDER_DOCKER_MEMORY and RJOURNAL_RENDER_DOCKER_CPUS are applied per container. Each item container also has an outer timeout controlled by --container-timeout=<seconds> or RJOURNAL_RENDER_DOCKER_ITEM_TIMEOUT; the default is 300 seconds, and 0 disables it. The inner rmarkdown::render() timeout defaults to 300 seconds and can be changed with --timeout=<seconds>.
When parallel containers discover missing R packages, package installation is serialized with a shared lock under tmp/ because apt/r2u installs cannot run concurrently.
For Docker rendering, custom --log=<path> values must live under tmp/ so the log path is writable inside the container.
Per-item container stdout/stderr is written under tmp/render-container-logs/<collection>/<slug>.log; failed items print the tail of that log. Xvfb startup logs are written next to them as <slug>.xvfb.log.
Useful environment variables:
RJOURNAL_RENDER_DOCKER_MEMORYsets the per-item container memory limit, default8g.RJOURNAL_RENDER_DOCKER_CPUSsets the per-item CPU quota, default2.RJOURNAL_RENDER_DOCKER_WORKERSsets the number of item containers to run in parallel, default1.RJOURNAL_RENDER_DOCKER_ITEM_TIMEOUTsets the outer per-item Docker container timeout in seconds, default300; use0to disable.RJOURNAL_RENDER_DOCKER_BUILD=0skips automatic image builds.RJOURNAL_RENDER_DOCKER_IMAGEoverrides the image tag.RJOURNAL_RENDER_DOCKER_CONFIGoverrides the isolated Docker CLI config directory, defaulttmp/docker-config.RJOURNAL_RENDER_DOCKER_BUILDKITcontrols the Docker build backend, default0to avoid host credential helpers during public base-image resolution.RJOURNAL_RENDER_INSTALL_LOCK_TIMEOUTsets the package-install lock timeout in seconds, default1800.
Render the website with:
quarto renderThe Quarto project intentionally renders only the homepage, static pages, the article template, and generated issue source pages. Final per-article and per-news pages are created in the post-render step from assets/article-template/index.qmd.