There is a newer version of this record available.

Software Open Access

ropensci/rtweet: rtweet 1.0.2

Michael W. Kearney; Lluís Revilla; Hadley Wickham; boB Rudis; Thomas Keller; Simon Heß; tylermorganwall; Kevin Taylor; Maëlle Salmon; Diego H.; Giorgio Comai; Ben Dilday; Jeroen Ooms; Richard Latham; Mike Chapple; 001ben; Aaron Rudkin; Brent Schneeman; Christophe Dervieux; Dave Parr; Dr Tom August; Emil Hvitfeldt; Garrick Aden-Buie; Hiroaki Yutani; Iñaki Ucar; Jem Stachelek; Jennifer (Jenny) Bryan; John Blischak; Jon Harmon; Kohl Kinning

rtweet 1.0.2
  • Exported again tweets_with_users and users_with_tweets because Twitmo depends on them.
rtweet 1.0.1
  • Fixed issue with .Rbuilignore and vignettes

  • Reduced fixtures sizes by limiting the page size to the number of requests if it is smaller than the default page size.

rtweet 1.0.0 Breaking changes
  • Data returned by rtweet is nested and uses the same names provided by the Twitter API. It doesn't compute or add new columns as it did previously.

  • emojis, langs and stopwordslangs data are no longer provided by rtweet.

  • get_friends() and get_followers() return similar formatted output with two columns "from_id" and "to_id" (#308, @alexpghayes).

  • All paginated functions that don't return tweets now use a consistent pagination interface. They all store the "next cursor" in an rtweet_cursor attribute, which will be automatically retrieved when you use the cursor argument.

  • Functions that return tweets (e.g. get_favorites(), get_my_timeline(), get_timeline(), get_mentions(), lists_statuses() and search_tweets()) now expose a consistent pagination interface. They all support max_id and since_id to find earlier and later tweets respectively, as well as retryonratelimit to wait as long as needed when rate limited (#510).

  • suggested_slugs(), suggested_users(), suggested_users_all() have been removed as they stopped working when Twitter remove the suggested users endpoint in June 2019 (

  • parse = FALSE always means return the raw "JSON". Previously some functions (e.g. my_friendships()) would return the raw HTTP response instead (#504).

  • rtweet no longer re-exports the magrittr pipe %>%; if you want to continue using it, you'll need to library(magrittr) or library(dplyr) (#522).

  • The authentication system has been rewritten, check the following section.

  • lookup_collections() and get_collections() has been hard deprecated because the underlying Twitter API has been deprecated.

  • previous_cursor() has been hard deprecated. It could only be used with lists_memberships() and it has been dropped in favour of making regular pagination better.

  • tweet_shot() has been hard deprecated as the screenshots do not have the tweet. It might come back with webshot2 (#458).

  • The home argument to get_timeline() has been deprecated. You can only retrieve the home timeline for the logged in user, and that's the job of get_my_timeline() (#550).

  • Due to the changes on rtweet data format, all the functions related to flattening the data (write_as_csv(), save_as_csv() flatten(), unflatten(), read_twitter_csv()) are deprecated. Users should decide how to flatten the nested structure of the data.

  • lookup_statuses() has been deprecated in favour of lookup_tweets().

  • as_userid() has been deprecated since in case of ambiguity the default is to assume a numeric string is a user id (#520). All functions now use a single user_type() function so behaviour is identical for all rtweet functions.

  • get_timelines() has been deprecated since it does that same thing as get_timeline() (#509).

  • stream_tweets2() has been deprecated in favour of stream_tweets().


rtweet's authentication system has been completely written. It is now based around three authentication options: rtweet_user(), rtweet_app(), and rtweet_bot(). Authentication no longer touches ~/.Renviron file; instead auth_save() and auth_as() allow you to explicitly save and load authentication mechanisms from a system config directory. See vignette("auth") for more details.

  • The httpuv package is now only suggested, since it's only needed for interactive auth, and you'll be prompted to install it when needed.

  • bearer_token() has been deprecated in favour of rtweet_app(), which takes the bearer token found in your Twitter developer portal. invalidate_bearer() has been deprecated since this is something you should do yourself in the Twitter developer portal.

  • create_token() has been deprecated in favour of the combination of rtweet_user()/rtweet_bot()/rtweet_app() + auth_as() + auth_save().

  • get_token() and get_tokens() have been deprecated in favour of auth_get() and auth_list().

  • auth_as() accepts path to an authentication to make it easier to use authentications outside a user account (#602, @maelle)

  • auth_setup_default() will not only authenticate and save but use the default token.

  • The new auth_sitrep() helps reports the different authentications of the user

Other changes
  • Update to new rOpenSci Code of Conduct:

  • lookup_users() and search_users() now returns a data frame containing all information about each user (not their latest tweet). If you want to get that data you can use tweets_data().

  • rtweet 1.0.0 implements a consistent strategy for handling rate limits. By default, if a paginated function (i.e. a rtweet function that performs multiple calls to the twitter API) is rate-limited it will return all results received up to that point, along with a warning telling you how to get more results. Alternatively, if you want to automatically wait until the rate-limit is reset, you can set retryratelimit = TRUE.

  • The default value of retryonratelimit comes from the option rtweet.retryonratelimit so you can globally set it to TRUE if desired (#173).

  • All functions that perform multiple requests on your behalf now display a progress bar so you know what's happening. If you don't want it, you can turn it off with verbose = FALSE (#518).

  • Banned or protected accounts now trigger a warning instead of an error, but if data from other users is requested it is not served by the API and returned as NA (#590, @simonheb).

  • Added support for posting alt-text metadata with images tweeted with status updated via post_tweet(). (#425, @hrbrmstr)

  • stream_tweets() has been overhauled to only write valid data. This obsoletes all previous strategy to clean up bad data after the fact (#350, #356).

  • The maintainer changed.

  • New user_block() and user_unblock() to block and unblock users (#593, @simonheb).

  • The new tweet_threading function is now faster and more reliable (#305, #693, @charliejhadley).

  • Message are now properly capitalized (#565, @jsta)

  • Fields withheld_scope, withheld_copyright, withheld_in_countries are now correctly parsed (#647, @alexpghayes).

  • Functions like search_tweets(), lookup_statuses() and others return the appropriate date time format for the right columns (created_at mostly) (#653, #657, #660, @alexpghayes, @RickPat).

  • Premium/sandbox environments are supported in search_fullarchive() and search_30day() (#578, #713).

  • The vignette must be pre-computed before submission (#609, @maelle).

Files (4.2 MB)
Name Size
4.2 MB Download
All versions This version
Views 1,161129
Downloads 642
Data volume 366.7 MB8.4 MB
Unique views 1,049121
Unique downloads 561


Cite as