Skip to content
Back to skills

2541 Tidyverse Formatting 6f9d8aae

ASecurity

Tidyverse-specific formatting requirements for blog posts on tidyverse.org. These conventions are for the hugodown-based Tidyverse blog.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
documentationgogitdocumentation

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2541-tidyverse-formatting_6f9d8aae --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2541 Tidyverse Formatting 6f9d8aae?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2541 Tidyverse Formatting 6f9d8aae
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2541-tidyverse-formatting-6f9d8aae/badge)](https://www.skillsdirectory.com/skills/tools-only-2541-tidyverse-formatting-6f9d8aae)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Tidyverse Blog Formatting Conventions

Tidyverse-specific formatting requirements for blog posts on tidyverse.org. These conventions are for the hugodown-based Tidyverse blog.

## Workflow for tidyverse.org Blog

When creating a blog post for the official `tidyverse/tidyverse.org` repository, follow these steps:

1. **Install hugodown** (if not already installed):
   ```r
   pak::pkg_install("r-lib/hugodown")
   ```

2. **Create a new post**:
   ```r
   hugodown::use_tidy_post("short-name")
   ```

   This creates `content/blog/short-name/` containing an `index.Rmd` file.

   Common patterns for `"short-name"`:
   - Package release: `lifecycle-1-0-0`, `parsnip-0-1-2`
   - Package release with specific topic: `dplyr-1-0-0-rowwise`, `parsnip-adjacent`, `dplyr-1-0-4-if-any`
   - Topic only: `self-cleaning-test-fixtures`, `taking-control-of-plot-scaling`

3. **Write and knit**:
   - Edit the generated `index.Rmd` file
   - Knit `index.Rmd` to generate `index.md`
   - Note: `.Rmd` files are only rendered when you explicitly knit them

4. **Preview the site**:
   ```r
   hugodown::hugo_start()
   ```
   This runs once per session and continues in the background to turn `.md` into `.html`.

5. **Check for outdated files** (if concerned):
   ```r
   hugodown::site_outdated()
   ```
   Lists all `.Rmd`s that need to be re-rendered.

6. **Add a photo**:
   Every blog post must be accompanied by a photo. If you don't have one in mind, try:
   - <https://unsplash.com>
   - <https://pexels.com>
   - Jenny Bryan's [free photo](https://github.com/jennybc/free-photos) link collection

7. **Submit PR**:
   - Every PR gets an automatic live preview via Netlify
   - Once merged, the preview becomes the live site

### Important Notes

- The site uses **hugodown** (not blogdown), which separates building into two steps:
  - hugodown generates `.md` from `.Rmd`
  - hugo generates `.html` from `.md`
- Use `.Rmd` files (not `.Rmarkdown`)
- Output should be `output: hugodown::hugo_document`
- If updating an old post to use hugodown:
  - Rename from `.Rmarkdown` to `.Rmd`
  - Delete the `.markdown` file
  - Set `output: hugodown::hugo_document` in YAML metadata

### For Additional Context

If you need more details about the workflow or encounter issues, consult the `README.md` in the `tidyverse/tidyverse.org` repository.

## Frontmatter Format

Tidyverse blog posts use YAML frontmatter with this structure:

```yaml
---
output: hugodown::hugo_document
slug: package-name-version
title: package-name version
date: YYYY-MM-DD
author: Author Name
description: >
    Brief description of the package and release
photo:
  url: https://unsplash.com/photos/photo-id
  author: Photographer Name
categories: [package-name]
tags: [package-name, category]
---
```

### Required Fields

- **`output`**: Always `hugodown::hugo_document`
- **`slug`**: URL slug using hyphens
  - Format: `packagename-x-y-z` (e.g., `ellmer-0-4-0`)
  - Replace dots with hyphens in version numbers
- **`title`**: Display title with spaces
  - Format: `packagename x.y.z` (e.g., `ellmer 0.4.0`)
- **`date`**: ISO format `YYYY-MM-DD`
- **`author`**: Full name of primary author
- **`description`**: Brief summary (can use `>` for multi-line)
- **`photo`**: Featured image with attribution
  - `url`: Full URL to image (often Unsplash)
  - `author`: Photographer name for attribution
- **`categories`**: Array with package name
- **`tags`**: Array with package name and related tags

### Slug vs Title Convention

The slug is used in URLs and must be URL-safe:
- Slug: `purrr-1-2-0` (hyphens, no dots)
- Title: `purrr 1.2.0` (space, dots in version)

### Image Attribution

Featured images are typically from Unsplash with proper photographer attribution:

```yaml
photo:
  url: https://unsplash.com/photos/abc123
  author: John Doe
```

## Title Format

The main title uses a simple format with space between package name and version:

```markdown
# packagename 1.2.0
```

No "released" or "version" prefix. Just the package name and version number.

## Code Formatting

### Language Identifiers

Use triple backticks with `r` language identifier for R code:

````markdown
```r
library(packagename)

result <- function_name(
  arg1 = "value",
  arg2 = TRUE
)
```
````

For installation:
````markdown
```r
install.packages("packagename")
```
````

### Inline Code Elements

- Function names: `` `function()` ``
- Packages: `` `{packagename}` `` when emphasizing it's a package
- Arguments: `` `arg = value` ``
- Values: `` `NULL` ``, `` `TRUE` ``, `` `"string"` ``

### Function Links

When linking to function documentation, use markdown links:

```markdown
[`function_name()`](https://url-to-docs)
```

## Section Structure

### Lifecycle Section Format

When including lifecycle changes, use this structure:

```markdown
## Lifecycle changes

* **Fully removed** after 5+ years of deprecation:
  * `function1()` - use `replacement1()` instead
  * `function2()` - use `replacement2()` instead

* **Newly deprecated** (soft-deprecation):
  * `function3()` is superseded by `function4()`
  * `function5()` is no longer recommended

* **Breaking changes**:
  * Description of what changed and why
```

Use bold for the lifecycle stage labels.

### Feature Sections

Use sentence case in headings:

```markdown
## Easier `in_parallel()`

[Description of the feature...]
```

Include function names in backticks when they're part of the heading.

## Acknowledgements Section

Always include as the final section:

```markdown
## Acknowledgements

A big thank you to all the folks who helped make this release happen:

[@username1](https://github.com/username1), [@username2](https://github.com/username2), [@username3](https://github.com/username3), and [@username4](https://github.com/username4).
```

### Formatting Rules

- Single paragraph format (not bulleted list)
- GitHub handles as markdown links
- Alphabetical order
- Comma-separated with "and" before the last name
- Period at the end

### Generating the List

Use `usethis::use_tidy_thanks()`:

```r
# Fetch contributors since last release
usethis::use_tidy_thanks("tidyverse/packagename")

# Or from specific tag
usethis::use_tidy_thanks("tidyverse/packagename", from = "v1.0.0")
```

This function outputs properly formatted markdown that can be copied directly into the blog post.

## Release Notes Link

Include a link to the full release notes (typically on pkgdown site):

```markdown
You can see a full list of changes in the [release notes](https://packagename.tidyverse.org/news/).
```

## Example Complete Frontmatter

```yaml
---
output: hugodown::hugo_document
slug: purrr-1-2-0
title: purrr 1.2.0
date: 2025-11-04
author: Hadley Wickham
description: >
    purrr 1.2.0 includes deprecations and minor enhancements to
    functional programming tools in R.
photo:
  url: https://unsplash.com/photos/xyz789
  author: Jane Photographer
categories: [purrr]
tags: [purrr, tidyverse]
---
```

## Examples of Well-Formatted Posts

Reference these posts for formatting examples:
- [pkgdown 2.2.0](https://www.tidyverse.org/blog/2025/11/pkgdown-2-2-0/)
- [testthat 3.3.0](https://www.tidyverse.org/blog/2025/11/testthat-3-3-0/)
- [purrr 1.2.0](https://www.tidyverse.org/blog/2025/11/purrr-1-2-0/)
- [ellmer 0.4.0](https://www.tidyverse.org/blog/2025/11/ellmer-0-4-0/)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.