Version 1.6 of blogdown was released to CRAN earlier this week. Although you can learn about all changes in the release notes, I’d like to quickly highlight a few things here:
The config/ directory
As some of you may know, Hugo supports the config file (config.yaml or
config.toml) under either the root directory of the website project or the
config/_default/ directory, which has the advantage of storing multiple config
files in one place. Previously, blogdown only supported the former case. Now
the latter case is also supported (thanks to the motivation from Athanasia and
Maëlle).
This means now you can move the config file from the root directory to the
config/_default/ directory if you prefer. Note that if the config file is
present in both places, blogdown can only recognize the root-level config,
so if you really intend to use the config directory, you need to remove the
root-level config.
Version X.Y or X.Y.0?
It has been a common mistake for users to specify a version number that omits
the .0 component, e.g., the Hugo version 0.87 does not exist, and only
0.87.0 does. Now blogdown::install_hugo() can detect this mistake and
automatically add .0 to the version number (with a message).
Specify os and arch in install_hugo()
The install_hugo() function has gained two arguments os and arch so that
you can specify the operating system and architecture by yourself, if the
automatic guess fails. For example, install_hugo() does not support FreeBSD by
default, but you can tell install_hugo() to install Hugo for your 64bit
FreeBSD via:
blogdown::install_hugo(os = 'FreeBSD', arch = '64bit', extended = F)
This will download hugo_*_FreeBSD-64bit.tar.gz from
https://github.com/gohugoio/hugo/releases and install it.
Available Hugo installers via hugo_installers()
Again, if install_hugo() fails to detect your os and arch, you may check
which os and arch Hugo actually supports via blogdown::hugo_installers().
It has a version argument, which defaults to the latest version of Hugo. The
output looks like this:
| version | os | arch | extended |
|---|---|---|---|
| 0.89.2 | DragonFlyBSD | 64bit | FALSE |
| 0.89.2 | FreeBSD | 64bit | FALSE |
| 0.89.2 | Linux | 32bit | FALSE |
| 0.89.2 | macOS | ARM64 | FALSE |
| 0.89.2 | NetBSD | 64bit | FALSE |
| 0.89.2 | OpenBSD | 64bit | FALSE |
| 0.89.2 | Linux | 64bit | TRUE |
| 0.89.2 | macOS | 64bit | TRUE |
| 0.89.2 | Windows | 64bit | TRUE |
| … | … | … | … |
After you find an installer appropriate for your operating system, you can pass
the corresponding version, os, arch, and extended arguments to
install_hugo() to install it.
Changes in new_post()
There were two changes in blogdown::new_post(). First, the default post
filename will no longer contain non-alphanumeric characters. Previously,
multibyte characters might not be excluded when generating the filename, and now
they will be excluded by default.
Second, if you do want to include multibyte characters in the filename (e.g.,
you can type such characters in the “New Post” addin in RStudio), they should
work correctly now. Previously new_post() could fail on Windows.
Changes in previous versions of blogdown
V1.5 added a global option
blogdown.time and if you set options(blogdown.time = TRUE), the local time
will be added to the date field of a new post when it is created via
new_post(). The date field will like this:
---
date: 2021-11-10T15:50:34-0600
---
Why do you want to add time to the date? This is to avoid the ambiguity of the
date. A date without time and timezone info is ambiguous, which can cause a
build problem. For example, if you write and publish a post at 10am on
2021/11/10 in the timezone GMT+8, and the server that builds your website is in
the timezone GMT-6, Hugo on the server will think the post date is in the future
(the server date is still 2021/11/09 and the time is 8pm there). As a result,
Hugo will not build this post by default, unless you use the --buildFuture or
-F flag in the command to force Hugo to
build future posts.
This problem can be extremely difficult for people to debug (even
blogdown::check_site() cannot help), because there are not build errors in
this case, but your post just will not show up. If your timezone is ahead of
your server’s (e.g., Netlify or Vercel), you may want to consider either setting
this R option, or use the -F flag in the command.

V1.4 added support for
machines with ARM chips in install_hugo().
You can always learn about all changes in blogdown in its release notes at https://github.com/rstudio/blogdown/releases.
Donate
As a freelancer (currently working as a contractor) and a dad of three kids, I truly appreciate your donation to support my writing and open-source software development! Your contribution helps me cope with financial uncertainty better, so I can spend more time on producing high-quality content and software. You can make a donation through methods below.
-
Venmo:
@yihui_xie, or Zelle:[email protected] -
Paypal
-
If you have a Paypal account, you can follow the link https://paypal.me/YihuiXie or find me on Paypal via my email
[email protected]. Please choose the payment type as “Family and Friends” (instead of “Goods and Services”) to avoid extra fees. -
If you don’t have Paypal, you may donate through this link via your debit or credit card. Paypal will charge a fee on my side.
-
-
Other ways:
WeChat Pay (微信支付:谢益辉) Alipay (支付宝:谢益辉) 

When sending money, please be sure to add a note “gift” or “donation” if possible, so it won’t be treated as my taxable income but a genuine gift. Needless to say, donation is completely voluntary and I appreciate any amount you can give.
Please feel free to email me if you prefer a different way to give. Thank you very much!
I’ll give back a significant portion of the donations to the open-source community and charities. For the record, I received about $30,000 in total (before tax) in 2024-25, and gave back about $15,000 (after tax).