Skip to content

usethis 2.2.3

CRAN release: 2024-02-19

  • Patch release with changes to .Rd files requested by CRAN.

usethis 2.2.2

CRAN release: 2023-07-05

usethis 2.2.1

CRAN release: 2023-06-23

usethis 2.2.0

CRAN release: 2023-06-06

New functions

  • use_author() is a new function to introduce a new person into the Authors@R field of DESCRIPTION (@avalcarcel9, #833).

  • use_rstudio_preferences() lets you set RStudio preferences programmatically (#1518)

  • use_standalone() is a new function that makes it easier to use standalone files provided by various low-level tidyverse packages, like rlang (#1654).

  • use_upkeep_issue() is a new function to facilitate regular maintenance of your package. Similar to use_release_issue(), it opens an issue in your repo with a checklist of maintenance tasks. It will include additional bullets if your package includes an upkeep_bullets() function that returns a character vector (#1794).

Package development

  • Although nested projects are discouraged, they can be useful in development contexts. create_package() now sets the correct package name and returns the correct package path for a package nested inside a project (#1647).

  • use_article() no longer adds the rmarkdown package to Suggests. Instead, if rmarkdown is not already a dependency, it’s added to Config/Needs/website. This means that a package that only uses articles (vs. vignettes) won’t gain an unnecessary dependency on rmarkdown (#1700).

  • use_data() now sets the appropriate minimal R version in DESCRIPTION, depending on which serialization format version you choose (@dpprdan, #1672).

  • use_github_links() by default now appends the GitHub url to existing urls in in the URL field of DESCRIPTION, rather than replacing existing urls (#1805).

  • use_latest_dependencies() no longer affects Suggests since those dependencies are not enforced (#1749).

  • use_news_md() now places “(development version)” in the header of if there is a development version number in DESCRIPTION. It also sets the first bullet to “Initial CRAN submission” when it looks like a “new” package (#1708).

  • use_coverage() no longer adds covr to Suggests, since the test-coverage GitHub Actions workflow takes care of installing covr (@Bisaloo, #1851).

Package release

Package file management

Git and GitHub

Minor improvements and fixes

Defunct functions

usethis 2.1.6

CRAN release: 2022-05-25

  • use_github_action() and friends gain a ref argument, which defaults to the tag of the latest release in (#1541).

  • use_github_actions_badge() now uses the same URLs as GitHub does via the “Create status badge” helper in the browser (#1525). This changes the significance of the name argument; now it really must be the name of the workflow configuration file.

  • All functions error more clearly when the requested operation is not supported for the “theirs” remote configuration (#1588).

Other changes

usethis 2.1.5

CRAN release: 2021-12-09

  • pkgdown-related functions no longer automatically strip a trailing slash from the pkgdown site URL, in order to play more nicely with CRAN’s URL checks (#1526).

  • edit_pkgdown_config() is a new function that opens the pkgdown YAML configuration file for the current Project, if such a file exists.

  • The error thrown when reporting an unsupported GitHub configuration has been fixed for forward compatibility with a future version of rlang, i.e. what is anticipated to be rlang v1.0.0.

  • Version 2.1.4 was never released. Version was advanced from 2.1.4 to 2.1.5 strictly for CRAN (re-)submission purposes.

usethis 2.1.3

CRAN release: 2021-10-27

  • Modified a test to ensure that intermittent GitHub rate limiting does not lead to ungraceful failure on CRAN.

usethis 2.1.2

CRAN release: 2021-10-25

  • git_default_branch_rename() no longer errors on repos where README exists, but has no badge block.

  • git_default_branch_rediscover() prunes the defunct remote ref to the old default branch, e.g. origin/master.

  • Version 2.1.1 was never released. Version was advanced from 2.1.1 to 2.1.2 strictly for CRAN (re-)submission purposes.

usethis 2.1.0

CRAN release: 2021-10-16

Git default branch support

usethis has a more sophisticated understanding of the default branch and gains several functions to support default branch renaming.

  • git_branch_default() has been renamed to git_default_branch(), to place it logically in the new family of functions. The old name still works, but that won’t be true forever.
  • git_default_branch() is much more diligent about figuring out the default branch. Instead of only consulting the local repo, now we integrate local info with the default branch reported by the upstream or origin remote, if applicable.
    • This is intended to surface the case where a project has renamed its default branch and the local repo needs sync up with that.
  • git_default_branch_rediscover() is a new function that helps contributors update their local repo (and personal fork, if applicable) when a project/repo renames its default branch.
  • git_default_branch_rename() is a new function that helps a repo owner rename the default branch (both on GitHub and locally).
  • git_default_branch_configure() is a new function to set the new Git configuration option init.defaultBranch, which controls the name of the initial branch of new local repos.
  • git_sitrep() exposes init.defaultBranch and surfaces the more sophisticated analysis of git_default_branch().

Package development

Aimed at the tidyverse team

These functions are exported for anyone to use, but are aimed primarily at the maintainers of tidyverse, r-lib, and tidymodels packages.

User-level configuration

  • "usethis.overwrite" is a new option. When set to TRUE, usethis overwrites an existing file without asking for user confirmation if the file is inside a Git repo. The normal Git workflow makes it easy to see and selectively accept/discard any proposed changes. This behaviour is strictly opt-in (#1424).

  • Functions that provide code to load packages in your .Rprofile now use rlang::check_installed() to make sure the package is installed locally (@malcolmbarrett, #1398).

  • edit_rstudio_prefs() and edit_rstudio_snippets() should work now on case-sensitive OSes, due to a path fix re: the location of RStudio’s config files (@charliejhadley, #1420).

usethis 2.0.1

CRAN release: 2021-02-10

usethis 2.0.0

CRAN release: 2020-12-10

Adoption of gert and changes to Git/GitHub credential handling

Usethis has various functions that help with Git-related tasks, which break down into two categories:

  1. Git tasks, such as clone, push, and pull. These are things you could do with command line Git.
  2. GitHub tasks, such as fork, release, and open an issue or pull request. These are things you could do in the browser or with the GitHub API.

We’ve switched from git2r to the gert package for Git operations ( We continue to use the gh package for GitHub API work (

The big news in this area is that these lower-level dependencies are getting better at finding Git credentials, finding the same credentials as command line Git (and, therefore, the same as RStudio), and finding the same credentials as each other. This allows usethis to shed some of the workarounds we have needed in the past, to serve as a remedial “credential valet”.

Under the hood, both gert and gh are now consulting your local Git credential store, when they need credentials. At the time of writing, they are using two different even-lower-level packages to do this:

Even now, gert and gh should discover the same credentials, at least for In the future, these two packages may merge into one.

Git/GitHub credential management is covered in a new article:
Managing Git(Hub) Credentials

The main user-facing changes in usethis are:

  • usethis should discover and use the same credentials as command line Git.
  • usethis should be able to work with any GitHub deployment. While is the default, GitHub Enterprise deployments are fully supported. The target GitHub host is determined from the current project’s configured GitHub remotes, whenever possible.

As a result, several functions are deprecated and several other functions have some deprecated arguments.

The switch to gert + credentials should eliminate most credential-finding fiascos. Gert also takes a different approach to wrapping libgit2, the underlying C library that does Git operations. The result is more consistent support for SSH and TLS, across all operating systems, without requiring special effort at install time. More users should enjoy Git remote operations that “just work”, for both SSH and HTTPS remotes. There should be fewer “unsupported protocol” errors.

GitHub remote configuration

Usethis gains a more formal framework for characterizing a GitHub remote configuration. We look at:

  • Which GitHub repositories origin and upstream point to
  • Whether you can push to them
  • How they relate to each other, e.g. fork-parent relationship

This is an internal matter, but users will notice that usethis is more clear about which configurations are supported by various functions and which are not. The most common configurations are reviewed in a section of Happy Git.

When working in a fork, there is sometimes a question whether to target the fork or its parent repository. For example, use_github_links() adds GitHub links to the URL and BugReports fields of DESCRIPTION. If someone calls use_github_links() when working in a fork, they probably want those links to refer to the parent or source repo, not to their fork, because the user is probably preparing a pull request. Usethis should now have better default behaviour in these situations and, in some cases, will present an interactive choice.

Default branch

There is increasing interest in making the name of a repo’s default branch configurable. Specifically, main is emerging as a popular alternative to master. Usethis now discovers the current repo’s default branch and uses that everywhere that, previously, we had hard-wired master.

git_branch_default() is a newly exported function that is also what’s used internally.

use_course(), use_zip(), and create_download_url() all have some support for forming the URL to download a .zip archive of a repo, based on a repo specification (e.g. OWNER/REPO) or a browser URL. These helpers now form a URL that targets HEAD of the repo, i.e. the default branch.

Changes to Git/GitHub functionality

The default Git protocol is now “https” and we no longer provide an interactive choice, by default, in interactive sessions. As always, a user can express a preference for “ssh” in individual function calls, for an R session via use_git_protocol(), and for all R sessions via the usethis.protocol option (#1262).

pr_resume() is a new function for resuming work on an existing local PR branch. It can be called argument-less, to select a branch interactively.

pr_fetch() can also be called with no arguments, to select a PR interactively. The owner argument is replaced by target, with a choice of the source (default) or primary repo.

pr_forget() is a new function for abandoning a PR you initiated locally or fetched from GitHub. It only does local clean up and, for example, doesn’t delete a remote branch or close a PR (#1263).

pr_view() can now be called with no arguments. If the current branch is associated with an open PR, we target that and, otherwise, we offer an interactive selection.

pr_finish() deletes the remote PR branch if the PR has been merged and the current user has the power to do so, i.e. an external contributor deleting their own branch or a maintainer deleting a branch associated with an internal PR (#1150). It no longer errors if the PR branch has already been deleted (#1196).

pr_pull_upstream() is renamed to pr_merge_main() to emphasize that it merges the main line of development into the current branch, where the main line of development is taken to mean the default branch, as reported by git_branch_default(), of the source repo, which could be either upstream or origin, depending on the situation.

create_from_github() will only create a read-only clone, due to lack of a GitHub personal access token, if explicitly directed to do so via fork = FALSE.

create_from_github() and use_tidy_thanks() accept browser and Git URLs as the repo_spec argument, to be friendlier to copy/paste. When a URL is passed, the host is also extracted from it.

create_github_token() is a new name for the function previously known as browse_github_token() and browse_github_pat().

issue_close_community() and issue_reprex_needed() are two new functions for maintainers who process lots of GitHub issues. They automate canned replies and actions, e.g. labelling or closing (#940).

GitHub Actions is the preferred platform for continuous integration, because that is what the tidyverse team currently uses and maintains. Functions related to Travis-CI and AppVeyor are soft-deprecated to raise awareness about this change and to make it clear that, if substantial maintenance becomes necessary, we may elect to retire the function (#1169).

browse_github_actions() is a new function to open the Actions page of the respective repo on GitHub, similar to existing browse_*() functions (@pat-s, #1102).

use_github_pages() is a new function to activate or reconfigure the GitHub Pages site associated with a repository (#224).

use_tidy_pkgdown() implements the complete pkgdown configuration used by the tidyverse team (#224).

pr_sync() is defunct and can be replicated by calling pr_pull(), pr_merge_main(), then pr_push().

Licensing improvements

All use_*_license() functions now work for projects, not just packages.

use_apl2_license() (not use_apache_license()) and use_gpl3_license() no longer modify the license text (#1198).

use_mit_license() now sets the default copyright holder to “{package} authors”. This makes it more clear that the copyright holders are the contributors to the package; unless you are using a CLA there is no one copyright holder of a package (#1207).

New use_gpl_license() and use_agpl_license() make it easier to pick specific versions of the GPL and AGPL licenses, and to choose whether or not you include future versions of the license. Both default to version 3 (and above).

New use_proprietary_license() allows your package to pass R CMD check while making it clear that your code is not open source (#1163). Thanks to @atheriel for the blog post suggesting the wording:

use_lgpl_license() now uses version 3 (and above), and gains new version and include_future argument to control which version is used.

use_gpl3_license(), use_agpl3_license() and use_apl2_license() have been deprecated in favour of the new version argument to use_gpl_license(), use_agpl_license() and use_apache_license().

The name argument to use_mit_license() has been changed to copyright_holder to make the purpose more clear. The name argument has been removed from all other license functions because it is not needed; no other license makes an assertion about who the copyright holder is.

RStudio preferences

usethis is now fully cognizant of the changes to RStudio preferences in RStudio 1.3:

edit_rstudio_snippets() looks in the new location, and if you have snippets in the old location, will automatically copy them to the new location (#1204)

New edit_rstudio_prefs() opens RStudio preferences file for editing (#1148).

use_blank_slate() can now configure your global, i.e. user-level, RStudio preference, in addition to project-level (#1018).

Other changes

browse_package() and browse_project() are new functions that let the user choose from a list of URLs derived from local Git remotes and DESCRIPTION (local or possibly on CRAN) (#1113).

The legacy "devtools.desc" option is no longer consulted when populating a new DESCRIPTION file. You must use the "usethis.description" now (#1069).

use_dev_package() gains a remote parameter to allow you to specify the remote. The existing behaviour, which adds an OWNER/REPO GitHub remote, remains the default (#918, @ijlyttle).

use_cpp11() is a new function to set up an R package to use cpp11.

create_package(roxygen = FALSE) once again writes a valid NAMESPACE file (and also has no Roxygen* fields in DESCRIPTION) (#1120).

create_package(), create_project(), create_from_github(), and proj_activate() work better with relative paths, inside and outside of RStudio (#1122, #954).

use_testthat() gains an edition argument to support testthat v3.0.0 (#1185)

use_version() now updates src/version.c if it exists and contains a line matching PKG_version = "x.y.z";.

usethis has been re-licensed as MIT (#1252, #1253).

Dependency changes

New Imports: gert, jsonlite (was already an indirect dependency), lifecycle, rappdirs

No longer in Imports: git2r, rematch2

usethis 1.6.3

CRAN release: 2020-09-17

Patch release to refactor usage of withr in the tests for forward compatibility with an upcoming withr release. All changes are within the usethis tests.

usethis 1.6.1

CRAN release: 2020-04-29

Patch release to align some path handling internals with an update coming in the fs package.

usethis 1.6.0

CRAN release: 2020-04-09

GitHub actions

Package creation

  • create_package() gains a roxygen argument. If TRUE (the default), it adds a RoxygenNote field to the DESCRIPTION (which means the first run of devtools::check() will re-document the package, #963), and creates an empty NAMESPACE (which means you’ll always need an explicit @export if you want to export functions, #927). It also turns markdown processing on by default (#911).

  • use_rstudio() now sets the LineEndingConversion to Posix so that packages created using usethis always use LF line endings, regardless of who contributes to them (#1002).

  • In the usethis.description option, you can now set Authors@R = person() directly, without having to wrap in additional layer of quotes. If setting this in your .Rprofile, you’ll need to use utils::person() since the utils package isn’t loaded until after your profile is executed.

PR helpers

Other new features

Minor improvements and bug fixes

Dependency changes

New Imports: cli, rematch2, rlang.

gh minimum version is bumped to v.1.1.0, due to changed behaviour around requests that return nothing.

clisymbols is removed from Imports.

usethis 1.5.1

CRAN release: 2019-07-04

This is a patch release with various small features and bug fixes.

Using the pipe %>% or the tidy eval toolkit in your package

  • The templates used by use_pipe() and use_tidy_eval() use a more robust form of cross-reference links, linking to files rather than topics. This should silence some warnings seen on Windows at install time (#730, #731 @jmgirard).

  • use_pipe() gains a logical export argument, so it can do the setup necessary to use the pipe operator when it is re-exported (export = TRUE, which is the default and preserves the previous behaviour) and when it is not (export = FALSE) (#783).

Git, GitHub, and pull requests

Build tools and continuous integration


  • use_zip() is a new variant of use_course() that downloads and unpacks a ZIP file, with less pedantic behaviour re: the destination directory. Both functions now also work for ZIP files with MIME type "application/x-zip-compressed" (#573).

  • use_version() can detect "(development version)" in a NEWS header and update it with an actual version (#768, @DavisVaughan).

Dependency changes

R 3.1 is no longer explicitly supported or tested. Our general practice is to support the current release (3.6, at time of writing), devel, and the 4 previous versions of R (3.5, 3.4, 3.3, 3.2).

fs minimum version is stated to be v1.3.0.

glue minimum version is stated to be v1.3.0.

usethis 1.5.0

CRAN release: 2019-04-07

Git, GitHub (and GitLab)

usethis gains several functions to inspect and manipulate the Git situation for the current project = repository. We also provide more control and visibility into git2r’s workings, especially around credentials (usethis uses git2r for all Git operations).

  • git_sitrep() lets you know what’s up with your Git, git2r and GitHub config (#328).

  • git_vaccinate() vaccinates your global (i.e. user-level) git ignore file. It adds standard entries for R users, such as .Rhistory and .Rdata. This decreases the chance that you commit and push files containing confidential information (#469).

  • git_remotes() and use_git_remote() are new helpers to inspect or modify Git remote URLs for the repo associated with the active project (#649).

  • git_protocol() + use_git_protocol() and git_credentials() + use_git_credentials() are new helpers to summon or set Git transport protocol (SSH or HTTPS) or git2r credentials, respectively. These functions are primarily for internal use. Most users can rely on default behaviour. Use these helpers to intervene if git2r isn’t discovering the right credentials (#653). usethis honors the usethis.protocol option, which allows you to express a general preference for SSH vs. HTTPS.

Other improvements and bug fixes:

GitHub pull requests

We’ve added experimental functions to work with GitHub pull requests. They are aimed at both a maintainer (who may make, review, and modify pull requests) and a contributor (who may make or explore pull requests).

  • git_sitrep() includes a section at the end aimed at describing “pull request readiness”. Expect that to develop and expand.

  • pr_init(), pr_fetch(), pr_push(), pr_pull(), pr_finish(), and pr_view() constitute the new family of helpers. They are designed to be smart about the significance of remotes with the standard names of origin and upstream and to facilitate both internal and external pull requests.

Partial file management

usethis gains tooling to manage part of a file. This is currently used for managing badges in your README and roxygen import tags:

  • use_badge() and friends now automatically add badges if your README contains a specially formatted badge block (#497):

    <-- badge:start -->
    <-- badge:end -->
  • use_tibble() and use_rcpp() automatically add roxygen tags to to {package}-package.R if it contains a specially formatted namespace block (#517):

    ## usethis namespace: start
    ## usethis namespace: end

    Unfortunately this means that use_rcpp() no longer supports non-roxygen2 workflows, but I suspect the set of people who use usethis and Rcpp but not roxygen2 is very small.

Extending and wrapping usethis

  • New proj_activate() lets you activate a project, either opening a new RStudio session (if you use RStudio) or changing the working directory (#511).

  • proj_get() and proj_set() no longer have a quiet argument. The user-facing message about setting a project is now under the same control as other messages, i.e. getOption("usethis.quiet", default = FALSE) (#441).

  • A new set of ui_*() functions makes it possible to give your own code the same user interface as usethis (#308). All use the glue and crayon and packages to power easy interpolation and formatting. There are four families of functions:

  • with_project() and local_project() are new withr-style functions to temporarily set an active usethis project. They make usethis functions easier to use in an ad hoc fashion or from another package (#441).

Tidyverse standards

These standards are (aspirationally) used by all tidyverse packages; you are welcome to use them if you find them helpful.

  • Call use_tidy_labels() to update GitHub labels. Colours are less saturated, docs is now documentation, we use some emoji, and performance is no longer automatically added to all repos (#519). Repo specific issues should be given colour #eeeeee and have an emoji.

  • Call use_logo() to update the package logo to the latest specifications: man/figure/logo.png should be 240 x 278, and README should contain <img src="man/figures/logo.png" align="right" height="139" />. This gives a nicer display on retina displays. The logo is also linked to the pkgdown site if available (#536).

  • When creating a new package, use create_tidy_package() to start with a package following the tidyverse standards (#461).

  • for the development version should use “(development version)” rather than the specific version (#440).

  • pkgdown sites should now be built by travis and deployed automatically to GitHub pages. use_pkgdown_travis() will help you set that up.

  • When starting the release process, call use_release_issue() to create a release checklist issue (#338).

  • Prior to CRAN submission call use_tidy_release_test_env() to update the test environment section in cran-comments() (#496).

  • After acceptance, try use_github_release() to automatically create a release. It’s created as a draft so you have a chance to look over before publishing.

  • use_vignette() includes the a standard initialisation chunk with knitr::opts_chunk$set(comment = "#>", collapse = TRUE) which should be used for all Rmds.

New functions not already mentioned

Other minor bug fixes and improvements

  • write_union() appends the novel lines, but does not remove duplicates from existing lines (#583, @khailper).

  • use_rcpp("foo") now creates src/foo.cpp (#117).

  • use_data() gains a version argument and defaults to serialization format version 2 (#675).

  • use_data_raw() accepts a name for the to-be-prepared dataset and opens a templated R script (#646).

  • browse_github() now falls back to CRAN organisation (with a warning) if package doesn’t have its own GitHub repo (#186).

  • create_*() restore the active project if they error part way through, and use proj_activate() (#453, #511).

  • edit_r_profile() and edit_r_environ() now respect environment variables R_PROFILE_USER and R_ENVIRON_USER, respectively (#480).

  • use_description() once again prints the generated description (#287).

  • use_description_field() is no longer sensitive to whitespace, which allows use_vignette() to work even if the VignetteBuilder field is spread over multiple lines (#439).

  • use_logo() can override existing logo if user gives permission (#454). It also produces retina appropriate logos by default, and matches the aspect ratio to the specification (#499).

  • use_news_md() will optionally commit.

  • use_package() gains a min_version argument to specify a minimum version requirement (#498). Set to TRUE to use the currently installed version (#386). This is used by use_tidy_eval() in order to require version 0.1.2 or greater of rlang (#484).

  • use_pkgdown() is now configurable with site options (@jayhesselberth, #467), and no longer creates the docs/ directory (#495).

  • use_test() no longer forces the filename to be lowercase (#613, @stufield).

  • use_test() will not include a context() in the generated file if used with testthat 2.1.0 and above (the future release of testthat) (#325).

  • use_tidy_description() sets the Encoding field in DESCRIPTION (#502, @krlmlr).

  • use_tidy_eval() re-exports := (#595, @jonthegeek).

  • use_tidy_versions() has source argument so that you can choose to use local or CRAN versions (#309).

  • use_travis() gains an ext argument, defaulting to "org". Use ext = "com" for (@cderv, #500).

  • use_version() asks before committing.

  • use_vignette() now has a title argument which is used in YAML header (in the two places where it is needed). The vignettes also lose the default author and date fields (@rorynolan, #445), and the R Markdown starter material. They gain a standard setup chunk.

  • use_version("dev") now creates a standard “(development version)” heading in (#440).

  • use_vignette() now checks if the vignette name is valid (starts with letter and consists of letters, numbers, hyphen, and underscore) and throws an error if not (@akgold, #555).

  • restart_rstudio() now returns FALSE in RStudio if no project is open, fixing an issue that caused errors in helpers that suggest restarting RStudio (@gadenbuie, #571).

Dependency changes

  • withr moves from Suggests to Imports.

  • purrr and yaml are new in Imports.

usethis 1.4.0

CRAN release: 2018-08-14

File system

All usethis file system operations now use the fs package (#177). This should not change how usethis functions, but users may notice these features of fs-mediated paths:

  • Paths are “tidy”, meaning / is the path separator and there are never multiple or trailing /.
  • Paths are UTF-8 encoded.
  • A Windows user’s home directory is interpreted as C:\Users\username (typical of Unix-oriented tools, like Git and ssh; also matches Python), as opposed to C:\Users\username\Documents (R’s default on Windows). Read more in fs::path_expand().

Extending or wrapping usethis

These changes make it easier for others to extend usethis, i.e. to create workflow packages specific to their organization, or to use usethis in other packages.

  • proj_path() is newly exported. Use it to build paths within the active project. Like proj_get() and proj_set(), it is not aimed at end users, but rather for use in extension packages. End users should use rprojroot or its simpler companion, here, to programmatically detect a project and build paths within it (#415, #425).

  • use_template() no longer errors when a user chooses not to overwrite an existing file and simply exits with confirmation that the file is unchanged (#348, #350, @boshek).

  • getOption("usethis.quiet", default = FALSE) is consulted when printing user-facing messages. Set this option to TRUE to suppress output, e.g., to use usethis functions quietly in another package. For example, use withr::local_options(list(usethis.quiet = TRUE)) in the calling function (#416, #424).

New functions

  • proj_sitrep() reports current working directory, the active usethis project, and the active RStudio Project. Call this function if things seem weird and you’re not sure what’s wrong or how to fix it. Designed for interactive use and debugging, not for programmatic use (#426).

  • use_tibble() does minimum setup necessary for a package that returns or exports a tibble. For example, this guarantees a tibble will print as a tibble (#324 @martinjhnhadley).

  • use_logo() resizes and adds a logo to a package (#358, @jimhester).

  • use_spell_check() adds a whitelist of words and a unit test to spell check package documentation during R CMD check (#285 @jeroen).

Other small changes and bug fixes

  • usethis has a new logo! (#429)

  • use_course() reports progress during download (#276, #380).

  • use_git() only makes an initial commit of all files if user gives explicit consent (#378).

  • create_from_github(): the repo argument is renamed to repo_spec, since it takes input of the form “OWNER/REPO” (#376).

  • use_depsy_badge() is defunct. The Depsy project has officially concluded and is no longer being maintained (#354).

  • use_github() fails earlier, with a more informative message, in the absence of a GitHub personal access token (PAT). Also looks for the PAT more proactively in the usual environment variables (i.e., GITHUB_PAT, GITHUB_TOKEN) (#320, #340, @cderv).

  • The logic for setting DESCRIPTION fields in create_package() and use_description() got a Spring Cleaning. Fields directly specified by the user take precedence, then the named list in getOption("usethis.description") is consulted, and finally defaults built into usethis. use_description_defaults() is a new function that reveals fields found in options and built into usethis. Options specific to one DESCRIPTION field, e.g. devtools.desc.license, are no longer supported. Instead, use a single named list for all fields, preferably stored in an option named "usethis.description" (however,"devtools.desc" is still consulted for backwards compatibility). (#159, #233, #367)

Dependency changes

New Imports: fs, glue, utils

No longer in Imports: backports, httr, rematch2, rmarkdown (moved to Suggests), styler (moved to Suggests)

usethis 1.3.0

CRAN release: 2018-02-24

  • usethis has a website: (#217). It includes an article with advice on system setup, for usethis and for R development more generally.

  • edit_*() functions now return the target path, invisibly (#255).

  • edit_git_ignore(scope = "user") prefers ~/.gitignore, but detects an existing ~/.gitignore_global, if it exists. If a new global gitignore file is created, it is created as ~/.gitignore and recorded in user’s git config as the core.excludesfile (#255).

  • create_from_github() gains several arguments and new functionality. The protocol argument lets user convey whether remote URLs should be ssh or https. In the case of “fork and clone”, the original repo is added as upstream remote. It is now possible – although rarely necessary – to directly specify the GitHub PAT, credentials (in git2r form), and GitHub host (#214, #214, #253).

  • use_github_labels() can create or update the colour of arbitrary GitHub issue labels, defaulting to a set of labels and colours used by the tidyverse packages, which are now exposed via tidy_labels(). That set now includes the labels “good first issue” and “help wanted” (#168, #249).

  • appveyor_info() no longer reverses the repo’s URL and image link. Corrects the markdown produced by use_appveyor_badge() (#240, @llrs).

  • use_cran_badge() uses an HTTPS URL for the CRAN badge image (#235, @jdblischak).

  • create_package() and create_project() return a normalized path, even if target directory does not pre-exist (#227, #228).

New functions

usethis 1.2.0

CRAN release: 2018-01-19

New functions

Other changes

  • New projects that don’t exhibit other obvious criteria for being a “project” will include a sentinel, empty file named .here, so they can be recognized as a project.

  • Project launching and switching works on RStudio server (#115, #129).

  • use_template() is newly exported, so that other packages can provide templating functions using this framework (@ijlyttle #120).

  • use_readme_rmd() and use_readme_md() work, in a similar fashion, for projects that are and are not a package (#131, #135).

  • use_readme_rmd() once again creates a pre-commit git hook, to help keep README.Rmd and in sync (@PeteHaitch #41).

  • Substantial increase in unit test coverage.

usethis 1.1.0

CRAN release: 2017-11-17

New helpers

Bug fixes and improvements

usethis 1.0.0

CRAN release: 2017-10-22

This is a new package that extracts out many functions that previously lived in devtools, as well as providing more building blocks so you can create your own helpers. As well as the many new helpers listed below, there are three main improvements to the package:

  • More support for general R projects, other than packages.
  • A notion of an “active” project that all commands operate on.
  • Refined output.

usethis is gradually evolving towards supporting more general R “projects”, not just packages. This is still a work in progress, so please let me know if you use a function that you think should work with projects but doesn’t. You can also try out the new create_project() which creates a basic RStudio project.

The concept of the working directory and the “base path” have been refined. Rather than using an argument to specify the active project, all use_ functions now use a global active project setting, as returned by proj_get(). This is cached throughout a session, although it will be updated by create_package() and create_project(). You’ll now get an clear error if you attempt to use_something() outside of a project, and create_something() will warn if you’re trying to create inside an existing project.

The output from all usethis commands has been reviewed to be informative but not overwhelming. usethis takes advantage of colour (using crayon and RStudio 1.1) to help chunk the output and clearly differentiate what you need to do vs. what has been done for you.

New functions

New edit functions

A new class of functions make it easy to edit common config files:

  • edit_r_profile_user() opens .Rprofile
  • edit_r_environ_user() opens .Renviron
  • edit_r_makevars_user() opens .R/Makevars
  • edit_git_config_user() opens .gitconfig
  • edit_git_ignore_user() opens .gitignore
  • edit_rstudio_snippets(type) opens ~/R/snippets/{type}.snippets


  • use_coverage("codecov") now sets a default threshold of 1% to try and reduce false positives (#8).

  • use_description() now sets ByteCompile: true so you can benefit from the byte compiler (#29)

  • The license functions (use_mit_license(), use_apl2_license(), and use_gpl3_license()) save a copy of the standard license text in, which is then added to .Rbuildignore. This allows you to follow standard licensing best practices while adhering to CRANs requirements (#10).

  • use_package_doc() uses more a modern roxygen2 template that requires less duplication.

  • use_test() will use the name of the currently open file in RStudio if you don’t supply an explicit name (#89).

  • use_readme_rmd() now puts images in man/figures/ and no longer adds to .Rbuildgnore. This ensures that the rendered will also work on CRAN (#16, #19). The first chunk now uses include = FALSE and is named setup (#19).

  • use_revdep() creates structure for use with revdepcheck package, the preferred way to run revdepchecks. (#33)

Building blocks

  • New use_badge() for adding any badge to a README. Now only prints a todo message if the badge does not already exist.

  • use_directory() is now exported (#27).

Bug fixes and minor improvements