Diffs for R Objects

Generate a colorized diff of two R objects for an intuitive visualization of their differences.

Dependencies direct/recursive

Generate a colorized diff of two R objects for an intuitive visualization of their differences.

See vignettes for details, and for comparisons with standard comparison functions.


If your terminal supports formatting through ANSI escape sequences, diffobj will output colored diffs to the terminal. Otherwise, output will be colored with HTML/CSS and sent to the IDE viewport or to your browser. diffobj comes with several built-in color schemes that can be further customized. Some examples:

Output Examples


This package is available on CRAN.


Related Software





This is a bugfix release.

  • #136: Documentation for ignore.white.space (h/t @flying-sheep) and max.diffs parameters listed incorrect defaults.
  • #135: Incorrect handling of potential meta data strings when unwrapping atomics would cause a "wrong sign in by argument" error (h/t @flying-sheep). We also fixed other bugs related to the handling of meta data in atomic vectors that were uncovered while debugging this issue.
  • #134: Forwarding ... to diff* functions no longer breaks substitution of arguments for diff banners (h/t @noamross)..
  • #133: diffFile considers files with equal content but different locations to be all.equal now (h/t @noamross).
  • #132: Duplicate pager slot for baseline Pager removed (h/t Bill Dunlap).

There are also several other small internal changes that in theory should not affect user facing behavior.


  • Set RNGversion() due to changes to sampling mechanism.



  • #129: Allow pager specification via lists rather than full Pager objects for easier changes to defaults. As part of this we changed StyleRaw objects to use default pager instead of PagerOff.
  • #126: Add embedding diffs in Shiny to vignette.
  • #119: ignore.whitespace now also ignores white space differences adjoining punctuation.
  • #118: New option to preserve temporary diff file output when using pager (see ?Pager).
  • #114: New options strip.sgr and sgr.supported allow finer control of what happens when input already contains ANSI CSI SGR and how ANSI CSI SGR is handled in string manipulations. Related to this, options(crayon.enabled=TRUE) is no longer set when capturing output prior to diff as it used to be. By default pre-existing ANSI CSI SGR is stripped with a warning prior to comparison.


  • #131: Fix missing slot in S4 class definition (discovered by Bill Dunlap).
  • #127: Width CSS conflicts with bootstrap (reported by @eckyu, debugged/fixed by @cpsievert).


  • #123: Compatibility with R3.1 (@krlmlr).
  • #121: Vignette describing how to embed diffs in Rmd documents (@JBGruber).
  • #115: Declare HTML page diff encoding/charset as UTF-8 (@artemklevtsov).


  • Comply with CRAN directive to remove references to packages not in depends/imports/suggests in tests (these were run optionally before).
  • Fix bugs in corner case handling when we hit max.diffs.


  • Fix test failures caused by changes in tibble output



  • Fix tests for next testthat release.
  • #107: Diffs on quoted language
  • #108: Problems caused by copying crayon functions (@seulki-choi, @gaborcsardi)
  • #100: R_useDynamicSymbols
  • #97: 2D Guidelines fixes for data.table, tibble
  • #96: Warnings when comparing large data tables.
  • #94: Guide detection problems in nested lists.
  • #105: Copyright tweaks.


  • #87: diffobj is now GPL (>=2) instead of GPL-3.
  • #81: Better handling of mixed UTF-8 / ASCII strings, reported by jennybc
  • #88: correctly handle trimming when empty lists are involved, reported by wch
  • #77: diffObj now favors dispatching to diffPrint unless diffPrint output is large
  • #82: diffChr and ses now treat NA as "NA" (needed with change in nchar(NA) in base R)
  • #85: Improved alignment of unwrapped atomic vector diffs
  • #83: Improve pager auto detection (note now ANSI output is only allowed by default if terminal supports ANSI colors and the system pager is less, see ?Pager for details)
  • #92, #80, #45: basic implementation of S4 guidelines and trimming (full resolution eventually with #33)
  • #84: simplify how to call diffChr for improved performance, including "optimization" of convert.hz.whitespace.
  • #64: fix line limit in corner case
  • More robust handling of external diff* methods and of how diffObj calls diffStr and diffPrint


  • #71: Buggy diffs b/w data frames when one has sequential row numbers and the other does not, loosely related to #38
  • #69: Improve performance on outputs with large print/show output, and other assorted minor optimizations
  • #72: Warn when style parameter overrides other user supplied parameters
  • #70: Improve word contrast in YB HTML mode
  • #63: Show all.equal output when objects are not all.equal but there are no visible differences
  • Add Mean Relative Indifference vignette and update vignette styling


  • #67: Fix CRAN Binaries
  • Clarified that C code is heavily modified and incompatible with original libmba implementation


  • First version on CRAN
  • #51: use RStudio viewport to display HTML diffs when running in RStudio, as per Noam Ross
  • #54: #55, scale HTML output to viewport width (see ?Style)
  • #53: default term colors computed on run instead of on package load
  • #56: disable wrap for HTML output
  • HTML output now captured with default width 80 since there is no explicit relationship between HTML viewport width and getOption("width")
  • The style parameter now accepts lists to use as instantiation arguments for Style objects (see ?Style)
  • Fix subtle rendering and formatting application flaws
  • Switch Travis shields to SVG per Gábor Csárdi
  • Improve in-hunk alignment of partially matching lines
  • Compile with -pedantic, fix related warnings Arun
  • Improved coverage and more robust testing
  • Several internal structure changes to accommodate improvements


  • #46: Guide and Trim Problems with Lists
  • #47: Output Format in non-ANSI Terminals Without Browser (reported by Frank)
  • #48: make_blocking Default prompt Confusing (reported by Frank)
  • #49: In-Hunk Word Diffs Issues when Unwrap-diffing Atomics
  • #50: CSS Lost in Rstudio Server Sessions (reported by Steven Beaupré)


  • Turn off unwrapping for named atomic vectors (see #43)
  • #44: Proper handling of NULL objects in diffStr
  • #41: Compilation Issues in Winbuilder


  • Initial Release

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.3.5 by Brodie Gaslam, 19 days ago


Report a bug at https://github.com/brodieG/diffobj/issues

Browse source code at https://github.com/cran/diffobj

Authors: Brodie Gaslam [aut, cre] , Michael B. Allen [ctb, cph] (Original C implementation of Myers Diff Algorithm)

Documentation:   PDF Manual  

GPL-2 | GPL-3 license

Imports crayon, tools, methods, utils, stats

Suggests knitr, rmarkdown

Imported by NMproject, provExplainR, ttdo, unitizer, vdiffr, waldo.

Suggested by DeclareDesign, TopDom, brms, sparklyr.

See at CRAN