Changelog
Source:NEWS.md
    pillar 1.11.1
Features
- 
glimpse()also works for stingy duckplyr data frames.
pillar 1.11.0
CRAN release: 2025-07-04
Bug fixes
- Fix formatting of numbers of the form 9.99…995 (#785, tidyverse/tibble#1648).
Features
- Checking sigfigargument to be 15 or less (#788).
Chore
- Refactor and comment formatting routine (#786).
pillar 1.10.2
CRAN release: 2025-04-05
Features
- Add color to commas for tibble::glimpse()(@TSchiefer, #658, #734).
Chore
- Compatibility with upcoming ggplot2 (@teunbrand, tidyverse/ggplot2#6361, #729).
Documentation
- Fix introductory example in vignette("extending")(#732, #736).
pillar 1.10.0
CRAN release: 2024-12-17
Features
- tbl_format_setup()gains a- setupargument that supports printing the header before the data for the body is available, e.g., for remote backends such as databases (#686).
- New - tbl_nrow()generic to support lazy data frames (#679).
- Show missing values in red in - glimpse()(@ryanzomorrodi, #662).
- Math operations on - num()objects now pass additional arguments to the mathematical function (@gvelasq, #659, #660).
pillar 1.9.0
CRAN release: 2023-03-22
Breaking changes
- 
colonnade(),extra_cols()andsqueeze()are now hard-deprecated (#272, #374, #631).
Bug fixes
Documentation
- Polish - ?pillar_options(#583).
- Fix typo & missing quote in digits vignette stub (@gavinsimpson, #629). 
pillar 1.8.1
CRAN release: 2022-08-19
Features
- New pillar.adviceoption to turn off advice in the footer, see?pillar_options. Now off by default in non-interactive mode (#577).
pillar 1.8.0
CRAN release: 2022-07-18
Display
- Column names that are abbreviated in the header gain a footnote and are printed in full in the footer (#483), after the extra columns (#548). If a column name in the header is abbreviated, all backticks are removed (#525). The new - "pillar.superdigit_sep"option that determines the string used to separate footnote from column name in the footer (#553).
- The default value of the - pillar.min_title_widthoption is changed to 5. This means that effectively the width of a pillar is decided only by the data. Use- options(pillar.min_title_width = 15)to restore the previous default, see also- ?pillar_optionsfor details (#531).
- Offer advice in the footer on how to print all columns or rows (#567). 
- Avoid aligning - NAinside quotes for very short character vectors (#562).
Features
- Pick up - "pillar_focus"attribute on printing to define focus columns (#549).
- New - ctl_new_rowid_pillar()generic and default method for customizing the appearance of row IDs (#260, #550, @nbenn).
Bug fixes
- Fix printing of - Survand- Surv2objects (#561).
- Fix wording for corner case - max_extra_cols = 1(#535).
- Remove excess underlines for - bit64::integer64()data of different magnitude (#517, #529).
Documentation
- ctl_new_pillar_list()is documented on a separate help page (#516).
- Remove outdated detail in - ?tbl_sum(@IndrajeetPatil, #565).
Chore
- Drop crayon dependency (#559). 
- Import ellipsis from rlang (#554). 
- Skip test that requires lubridate if it’s not installed (#505, @MichaelChirico). 
API
- Soft-deprecate - colonnade(),- squeeze()and- extra_cols()(#496).
- Require rlang 1.0.1 (#512). 
pillar 1.7.0
CRAN release: 2022-02-01
Breaking changes
- 
colonnade()is now soft-deprecated (#485).
- 
expect_known_display()andis_vector_s3()are now deprecated (#460, #501).
- 
new_pillar()deprecatesextraargument (#497).
Features
- Focus columns specified via the focusargument totbl_format_setup()are kept in their original place and shown with the maximum width and with the “type” component underlined (#465).
Bug fixes
- Update s3_register()to use new implementation from rlang, this fixes CRAN checks related toscale_type()(#462).
pillar 1.6.5
CRAN release: 2022-01-25
Breaking changes
- New ctl_new_pillar_list(), supersedesctl_new_compound_pillar()(#433).
Features
- If some but not all sub-columns of a data frame or matrix column are shown, the names and types of the remaining columns are displayed in the footer (#365, #444).
- 
num(fixed_exponent = ...)is now represented with the fixed exponent in the pillar header, and in the title in ggplot2 (#307).
- 
tbl_format_setup()gainsfocusargument that expects a character vector of column names. Focus columns are moved to the front and separated from the main columns by a subtle vertical line (#384).
- New scale_x_num()andscale_y_num(). If a column created withnum()is used in a ggplot, the x and y scale will be formatted automatically according to to the specification (#400, #404).
- List columns omit size information if horizontal space is insufficient (#392).
- If the column title of a backticked column is abbreviated, the trailing backtick is still printed (#391).
- 
new_pillar_shaft_simple()gainsshort_formattedargument that contains the data to be used if horizontal space is insufficient (#389).
- Default obj_sum()method returns abbreviation in attribute of return value (#390).
Bug fixes
- Extra columns in footer show backticks again if they are non-syntactic (#393).
- Fixed some cases for combinations of printed width and getOption("width")(#432).
- Fix support for nanotime::nanotime()classes (#378, #380).
Internal
- Use eager registration via NAMESPACEfor own methods for classes from other packages.
- Reworked formatting routine, now using a visitor-based approach with in-order iteration over all pillars. The only visible changes are that usage of free space (in the case of limited space) has slightly improved (#435).
- Prepared removal of dependency on the crayon package (#233, #406).
- Use snapshot variants, requires testthat >= 3.1.1 (#387).
- Replace internal "pillar_vertical"class withglue::as_glue()(#279).
pillar 1.6.4
CRAN release: 2021-10-18
Bug fixes
- Fix printing for some tibbles where a fixed-width column is followed by a column with variable width (#366).
- Avoid nested backtick blocks in vignette.
pillar 1.6.3
CRAN release: 2021-09-26
- Avoid blanket import for lifecycle package for compatibility with upcoming rlang (#368, @romainfrancois).
pillar 1.6.2
CRAN release: 2021-07-29
Options
- Options pillar.print_max,pillar.print_min,pillar.widthandpillar.max_extra_colsare now queried before the correspondingtibble.ordplyr.options are consulted, the latter will be soft-deprecated in pillar v2.0.0 (#353).
- New pillar.bidioption. When active, control characters are inserted to improve display of data with right-to-left text (#333).
- The new pillar.max_footer_linesoption (default: 7) allows controlling the maximum number of footer lines shown. It is applied in addition to the existingtibble.max_extra_colsoption (#263).
Formatting
- If a column doesn’t make use of all horizontal width offered to it, the excess width is distributed over other columns (#331).
- Improved allocation of free space in multi-tier tables with getOption("tibble.width") > getOption("width")(#344).
- All pillars are shown with their true horizontal extent, irrespective of the indicated width. This simplifies the implementation of custompillar_shaft()methods (#347).
Features
- 
num()gainsextra_sigfigargument to automatically show more significant figures for numbers of the same magnitude with subtle differences (#97).
- 
print.tbl()andformat.tbl()support themax_extra_colsandmax_footer_linesarguments that override the corresponding options (#360).
- 
print.tbl()andformat.tbl()maps the now deprecatedn_extraargument tomax_extra_colsfor consistency (#360).
Bug fixes
- Avoid mangling of duplicate column names in footer (#332).
- Fix warning with zero of type bit64::integer64()(#319).
Documentation
- All package options are now documented in ?pillar_options(#339).
- 
obj_sum()no longer callstype_sum()for vectors since pillar v1.6.1, this is now documented (#321).
- Fix documentation on usage of vctrs::vec_proxy()andvctrs::vec_restore()(#322).
Internal
- Using attr(exact = TRUE)everywhere.
- 
is_vector_s3()is no longer generic (#181).
- Fix internal logic around vec_proxy()andvec_restore()(#316).
pillar 1.6.0
CRAN release: 2021-04-13
Features
- New num()andchar()offer a flexible way to customize the display of numeric and character columns (#191, #84).
- New "pillar.max_dec_width"option (#308).
- New format_type_sum.AsIs()avoids the need to implement your ownformat_type_sum()method (#286).
- 
align()gainsspaceargument to control the character used for filling (#285).
- Numbers in scientific and decimal notation are formatted with the same rules regarding significant or decimal digits (#297).
Bug fixes
- Load the debugme package only if the DEBUGMEenvironment variable is set.
- More accurate detection if the decimal dot is necessary, and how many digits to show after the decimal dot (#298).
- Use display width instead of number of characters when truncating character columns.
Documentation
- New vignette("numbers")andvignette("digits")(#308).
pillar 1.5.1
CRAN release: 2021-03-05
Features
- New format_glimpse()(#177).
Bug fixes
- Color and formatting can now be reliably turned off by setting the "cli.num_colors"option to 1 (#269).
Documentation
- Add examples for new functions (#264).
- Fix lifecycle badges everywhere.
pillar 1.5.0
CRAN release: 2021-02-22
Extensibility
- New - size_sum()generic (#239).
- New - ctl_new_pillar()and- ctl_new_compound_pillar()used via- print.tbl(),- format.tbl()and- tbl_format_setup.tbl()(#230).
- New - new_pillar()low-level constructor (#230).
- New - new_pillar_component()and- pillar_component()(#230).
- New articles - vignette("extending")and- vignette("printing")(#251).
Formatting
- All printing code has been moved from tibble to pillar (#179), including - glimpse()(#234). This concentrates the printing code in one package and allows for better extensibility.
- New experimental generics - tbl_format_setup(),- tbl_format_header(),- tbl_format_body()and- tbl_format_footer()(#179).
- Improve formatting for - "Surv"and- "Surv2"classes from the survival package (#199).
- Vectors of the - vctrs_unspecified()class are formatted better (#256).
- Arrays are now formatted by showing only their first slice (#142). 
- Avoid wrapping extra column names with spaces (#254). 
Internal
- Now using debugme to simplify understand the complex control flow, see - vignette("debugme")(#248).
- New - format.pillar_ornament()(#228).
- Using testthat 3e (#218). 
- Avoid pillar.bold option in most tests (#216). 
- Change internal storage format for - colonnade()and- extra_cols()(#204).
pillar 1.4.5
CRAN release: 2020-07-09
Features
- New - pillar.min_charsoption allows controlling the minimum number of characters shown for a character column (#178, @statsmaths).
- bit64::integer64()columns are now formatted the same way as numeric columns (#175).
- New - align()to support easy alignment of strings within a character vector (existing function exported by @davidchall, #185).
Technical
- pillar_shaft(),- format_type_sum()and- extra_cols()issue a warning if dots are unused.
- new_pillar_title()and- new_pillar_type()warn if- ...is not empty.
pillar 1.4.4
CRAN release: 2020-05-05
- obj_sum()uses- vctrs::vec_size()internally.
- is_vector_s3.default()is soft-deprecated and no longer used. Please ensure that- vctrs::vec_is()is- TRUEfor your class.
- Rely on vctrs for type abbreviations. 
pillar 1.4.3
CRAN release: 2019-12-20
- new_pillar_shaft_simple()gains- naargument to control appearance of- NAvalues.
- String columns are quoted if at least one value needs quotes (#171). 
- Apply subtle style to - list_ofcolumns (#172).
- Fix formatting if mantissa is very close to 1 (#174). 
- Use - as.character()instead of- as_character().
- Remove compatibility with testthat < 2.0.0. 
pillar 1.4.2
CRAN release: 2019-06-29
- List columns are shown with their perceived dimensions, which may be different from those stored in the - "dim"attribute. Regression introduced in 1.4.0 (#167).
- Add ellipsis to - vec_ptype_abbr()method.
pillar 1.4.0
CRAN release: 2019-05-11
Breaking changes
- 
type_sum()forwards tovctrs::vec_ptype_abbr()(#134). This makes sure thatlist_ofcolumns (for values of the same type) are properly displayed. The value returned forfactorandcomplexremains unchanged, because this will change in vctrs.
- The classargument tonew_pillar_shaft()deprecates the existingsubclassargument. Passing asubclassargument leads to a warning once per session (#157).
Output
- Removed extra space for pillars with a negative value of lower magnitude than the largest positive value (example: -1 and 23).
- 0-col tibble and matrix columns are now formatted with a capital containing [,0]and an empty shaft (#149).
Performance
- 
squeeze()is now faster (because the width computation inpillar_shaft.numeric()now uses more arithmetics instead of string concatenation). Further speedups may require implementation of crucial parts in C (#147).
- Styling output is faster: an expensive check for availability of colored output is carried out only once per call to colonnade(), and styling is implemented manually (#133, @jimhester).
Internal
- All internal S3 classes have the pillar_prefix (#156).
- Only check native output on Windows, due to subtle differences when running on Linux in a latin1 locale.
pillar 1.3.1
CRAN release: 2018-12-15
Bug fixes
- Fix off-by-one error in distribution of empty space (#141).
Visible changes
- 
NAin names is no longer escaped with backticks.
- Don’t add quotes for pillars formatted with their format()method (tidyverse/tibble#448).
pillar 1.3.0
CRAN release: 2018-07-14
Visible changes
- Unknown data types are formatted using - format(), not- as.character()(#120).
- Multi-tier colonnades can always fill the last tier, even if the width isn’t a proper multiple of - getOption("width"). (Example:- options(width = 80, tibble.width = 200)will print a wide tibble in three tiers, each 80 characters wide, with a total width of 240 characters.)
- Fixed mixed formatting (showing some pillars with maximum, and some with minimum width). If a pillar’s minimum width is smaller than - getOption("width"), it is shown nevertheless, abbreviated with dots if necessary.
Interface changes
- 
format_type_sum()gainswidthargument (#73).
Performance improvements
- Printing large multi-tier colonnades is much faster, the code that distributes pillars over tiers uses a much simpler and much faster algorithm (tidyverse/tibble#422). 
- Printing is now faster overall, because less work is done for formatting in “subtle” style (gray of a fixed level), and because - fansi::strip_sgr()is used instead of- crayon::strip_style().
- Slightly faster printing of colonnades by reusing an intermediate result. 
Internal
- pillar()no longer adds backticks if- titleis non-syntactic.
- colonnade()supports data frames and matrices. When printing, each sub-column is shown individually, using a title that resembles the syntax used to access it. Also supports recursively nested data frames (with data frame or matrix columns).
- Added fuzz tests for character colonnades of varying widths. 
- Use - fansi::substr_ctl()in favor of- crayon::col_substr().
pillar 1.2.3
CRAN release: 2018-05-25
- Eliminate CRAN check warning about undeclared withr dependency.
- More defensive test to address CRAN check failures on Solaris.
- 
colonnade()now handles pillars named"sep"(#115).
- 
pillar_shaft.character()gainsmin_widthargument.
pillar 1.2.2
CRAN release: 2018-04-26
- Whole numbers are printed without a decimal dot again. Numbers that are the result of a whole number divided by a power of 10 (subject to a tolerance to account for floating-point imprecision) are shown without trailing decimal zeros, even if these zeros are significant according to the pillar.sigfigoption (#105).
- New new_pillar_title()andnew_pillar_type()to support consistent output inglimpse()(#31).
- New format_type_sum()generic that allows overriding the formatting of the type summary in the capital (#73).
- The digits.secsoption is respected when computing the width for date-time values (#102).
pillar 1.2.1
CRAN release: 2018-02-27
Display
- Turned off using subtle style for digits that are considered insignificant. Negative numbers are shown all red. Set the new option pillar.subtle_numtoTRUEto turn it on again (default:FALSE).
- The negation sign is printed next to the number again (#91).
- Scientific notation uses regular digits again for exponents (#90).
- Groups of three digits are now underlined, starting with the fourth before/after the decimal point. This gives a better idea of the order of magnitude of the numbers (#78).
- Logical columns are displayed as TRUEandFALSEagain (#95).
- The decimal dot is now always printed for numbers of type numeric. Trailing zeros are not shown anymore if all displayed numbers are whole numbers (#62).
- Decimal values longer than 13 characters always print in scientific notation.
Bug fixes
- Numeric values with a "class"attribute (e.g.,Durationfrom lubridate) are now formatted usingformat()if thepillar_shaft()method is not implemented for that class (#88).
- Very small numbers (like 1e-310) are now printed correctly (tidyverse/tibble#377).
- Fix representation of right-hand side for getOption("pillar.sigfig") >= 6(tidyverse/tibble#380).
- Fix computation of significant figures for numbers with absolute value >= 1 (#98).
New functions
- New styling helper style_subtle_num(), formatting depends on thepillar.subtle_numoption.
pillar 1.1.0
CRAN release: 2018-01-14
- 
NAvalues are now shown in plain red, without changing the background color (#70).
- New options to control the output, with defaults that match the current behavior unless stated otherwise:
- 
pillar.sigfigto control the number of significant digits, for highlighting and truncation (#72),
- 
pillar.subtleto specify if insignificant digits should be printed in gray (#72),
- 
pillar.negto specify if negative digits should be printed in red,
- 
pillar.boldto specify if column headers should be printed in bold (default:FALSE, #76),
- 
pillar.min_title_charsto specify the minimum number of characters to display for each column name (default: 15 characters, #75).
 
- 
- Shortened abbreviations for types: complex: cplx -> cpl, function: fun -> fn, factor: fctr -> fct (#71).
- Date columns now show sub-seconds if the digits.secsoption is set (#74).
- Very wide tibbles now print faster (#85).
pillar 1.0.0
CRAN release: 2017-11-20
Initial release.
Own S3 methods
pillar_shaft(x, ...) # AsIs, Date, POSIXt, character, default, list, logical, numeric
type_sum(x) # AsIs, Date, POSIXct, data.frame, default, difftime, factor, ordered
is_vector_s3(x) # Date, POSIXct, data.frame, default, difftime, factor, ordered
obj_sum(x) # AsIs, POSIXlt, default, list
extra_cols(x, ...) # squeezed_colonnade