← Back to home
Comparison · DevOps

ellipsis vs withr

A side-by-side editorial comparison of ellipsis and withr — release velocity, themes, recent moves, and the top alternatives to consider.

ellipsis vs withr: at a glance

Featureellipsiswithr
SectorDevOpsDevOps
Velocity score0.00.0
Sparks · 30d00
Top themesargument checking, rlang, tidyverse, superseded packagestate-management, testing, performance, base-r
Last editorial update50m ago1h ago
WebsiteVisit →Visit →

What is ellipsis?

ellipsis' checks live in rlang now; the package is a compatibility shim.

ellipsis provides check_dots_used(), check_dots_unnamed() and check_dots_empty() for catching arguments silently swallowed by dots. Its functional development finished in 2019 across the 0.2.0 and 0.3.0 releases. The two releases since deal only with rlang and CRAN, and 0.3.3 makes the rlang dependency unconditional.

Read the full ellipsis trajectory →

What is withr?

withr rebuilt defer() on base R's own on.exit(), and got much faster for it

withr provides the with_ and local_ functions that temporarily change global state and restore it on exit - the cleanup primitive under most of the tidyverse test suites. Version 3.0.0 reimplemented defer() as a thin wrapper over base::on.exit(), which the maintainers made possible by contributing the required arguments to R 3.5 itself. Everything since has been small correctness work.

Read the full withr trajectory →

ellipsis vs withr: editorial side-by-side

E
ellipsis
DEVOPS
0.0

ellipsis' checks live in rlang now; the package is a compatibility shim.

◆ Current state

ellipsis provides check_dots_used(), check_dots_unnamed() and check_dots_empty() for catching arguments silently swallowed by dots. Its functional development finished in 2019 across the 0.2.0 and 0.3.0 releases. The two releases since deal only with rlang and CRAN, and 0.3.3 makes the rlang dependency unconditional.

◆ Where it's heading

The package built its full surface quickly, hardened it once by switching the check functions from warnings to errors, then saw the ideas move upstream. These checks are part of rlang's own API now, which leaves ellipsis as a compatibility layer for packages still importing it directly. The 0.3.3 change to depend on rlang unconditionally states that relationship plainly.

◆ Prediction

With the functionality living in rlang, the next release is most likely another CRAN-driven fix; there is no sign of new checks being added here.

W
withr
DEVOPS
0.0

withr rebuilt defer() on base R's own on.exit(), and got much faster for it

◆ Current state

withr provides the with_ and local_ functions that temporarily change global state and restore it on exit - the cleanup primitive under most of the tidyverse test suites. Version 3.0.0 reimplemented defer() as a thin wrapper over base::on.exit(), which the maintainers made possible by contributing the required arguments to R 3.5 itself. Everything since has been small correctness work.

◆ Where it's heading

The arc here is a package pushing its own machinery down into base R and then living off the result. Once defer() became on.exit(), the remaining work is about where cleanup is allowed to happen - knitr documents, source() calls, the global environment, session end - and about restoring state correctly when an expression exits early. Releases are now infrequent and CRAN-driven.

◆ Prediction

Expect continued low-volume releases fixing edge cases in where deferred handlers run; with the core delegated to base R, there is little left that would prompt a larger change.

Alternatives to ellipsis and withr

Other DevOps products tracked by Sparkpulse, ranked by recent ship velocity. Each card links to a full editorial trajectory and lets you pivot into a head-to-head comparison with either ellipsis or withr.

See all ellipsis alternatives → · See all withr alternatives →

Recent activity from ellipsis and withr

Latest ship moves from both products, interleaved chronologically. ⚡ = editorial spark.

  1. 1mo agowithrlocal_seed() actually preserves the seed now
  2. 4mo agoellipsisNow depends unconditionally on rlang
  3. 1y agowithrlocal_language() no longer warns when set to C
  4. 2y agowithrdefer() becomes a thin wrapper over base::on.exit()
  5. 4y agowithrCleanup works inside Rmd and source(); with_() gains a getter
  6. 4y agowithrNew maintainer; handlers run at session end
  7. 5y agowithrlocal_options() can set NULL; with_seed() controls RNG kind
  8. 5y agoellipsisLicense changed to MIT; rlang compatibility updated
  9. 6y agoellipsisR-devel fix and new ?dots_used documentation topic
  10. 6y agoellipsischeck_dots_* functions gain an action argument
  11. 7y agoellipsischeck_ functions now throw errors; check_dots_empty() added
  12. 7y agoellipsischeck_dots_unnamed() added

Frequently asked questions

What is the difference between ellipsis and withr?

They serve adjacent needs but don't currently overlap on shipped themes. ellipsis and withr are shipping at a similar cadence (velocity 0.0 vs 0.0, both within Sparkpulse's "active" band). See the at-a-glance table above for a side-by-side breakdown of velocity, recent sparks, and editorial themes.

Is ellipsis better than withr?

Sparkpulse doesn't pick a winner — we score release velocity, not feature parity. ellipsis and withr are shipping at a similar cadence (velocity 0.0 vs 0.0, both within Sparkpulse's "active" band). For your specific use case, the alternatives sections above list other DevOps products to evaluate alongside.

What are the best alternatives to ellipsis?

Top ellipsis alternatives in DevOps are ranked by recent ship velocity. Browse the "ellipsis alternatives" section above for the current picks, or visit /alternatives/ellipsis for the full list with editorial commentary on each.

What are the best alternatives to withr?

Top withr alternatives in DevOps are ranked by recent ship velocity. Browse the "withr alternatives" section above for the current picks, or visit /alternatives/withr for the full list with editorial commentary on each.