Changelog
This changelog is generated automatically from GitHub Releases.
v0.22.0
2026-06-12 · GitHub
Great Tables v0.22.0 is a feature-rich release that greatly expands the formatting, text manipulation, and export capabilities of the library. Highlights include new methods for footnotes, duration formatting, parts-per notation, summary rows, and specialized column merges. A new suite of text_*() methods provides powerful cell-content transformations, while gtsave() replaces the deprecated save() with a modern headless-Chrome export pipeline. LaTeX output now supports stubs, row groups, and Markdown/HTML conversion. Pandas is no longer a required dependency—Polars-only usage is fully supported.
New Features
- tab_footnote() — Add table footnotes with automatic, sequentially-ordered marks (symbols, numbers, or letters) attached to targeted cells. Supports placement control and styled text via md() and html(). (#763)
- fmt_duration() — Format duration values in narrow (
5d 3h), wide (5 days, 3 hours), colon-separated (02:15:30), or ISO 8601 styles. Auto-detects PolarsDurationdtype and supports locale-aware plural forms. (#831) - fmt_partsper() — Format values as parts-per quantities (per-mille ‰, ppm, ppb, ppt, and more) with automatic scaling and context-aware symbol rendering for HTML and LaTeX. (#837)
- cols_reorder() — Completely rearrange all table columns in a single call, replacing multiple
cols_move_*()invocations for full reordering. (#625) cols_merge_*()methods — Specialized column merge variants: cols_merge_uncert() for value ± uncertainty, cols_merge_range() for begin–end ranges, cols_merge_n_pct() for count (percent) pairs, and the generic cols_merge() with pattern templating. (#832)- summary_rows() — Add group-wise summary rows (e.g., totals, means) above or below each row group, with support for Polars expressions and custom aggregation functions. (#834)
- text_transform() and
text_*()methods — New text manipulation suite: text_transform() for custom functions, text_replace() for regex substitution, text_case_match() for switch-like replacements, and text_case_when() for predicate-based logic. (#835, #836) - Substitution family methods — Replace specific cell values with sub_missing(), sub_zero(), sub_small_vals(), sub_large_vals(), and sub_values() for clean, readable tables. (#833)
- gtsave() — Save tables to PNG, JPEG, WebP, or PDF using headless Chrome with viewport, zoom, and padding controls. Replaces the deprecated
save()method. (#841)
Enhancements
- LaTeX output now fully supports stubs and row groups, including spanning headers and row-group-as-column layout. (#784)
- Markdown and HTML content is now converted to LaTeX equivalents during LaTeX rendering. (#803)
- Nanoplot scaling now correctly respects row selections rather than scaling across all data. (#404)
- Pandas is no longer a required dependency—Great Tables works with Polars alone for lightweight installs. (#839)
Bug Fixes
- Polars container dtype entries (e.g., lists) are now correctly converted in
_get_cell. (#794) - PyArrow array slicing in data_color now works correctly. (#741)
- A charset meta tag is now prepended to HTML output in
save()for proper encoding. (#823) - Nanoplot number streams now gracefully handle
nanvalues. (#838) - Removed the internal
NpNanbackend in favor of expanded normalization logic. (#840)
Documentation
New Contributors
- @KristijanArmeni made their first contribution in https://github.com/posit-dev/great-tables/pull/794
- @mrapacz made their first contribution in https://github.com/posit-dev/great-tables/pull/823
- @minimav made their first contribution in https://github.com/posit-dev/great-tables/pull/404
- @jiboncom made their first contribution in https://github.com/posit-dev/great-tables/pull/803
v0.21.0
2026-03-03 · GitHub
This release adds cols_merge() for combining cell contents across columns, cols_label_with() for function-based relabeling, fmt_engineering() for engineering notation, and opt_css() for injecting custom CSS rules.
Deprecations
- opt_all_caps() now uses loc.column_labels, loc.stub, and loc.row_groups for the
locations=argument. String-based locations still work but trigger a deprecation warning. (#436, @jrycw)
New Features
- cols_merge() method — Combine cell contents across two or more columns using format patterns. (#780)
- cols_label_with() method — Relabel columns using a function (e.g.,
str.upper,str.replace). (#816) - fmt_engineering() method — Format values in engineering notation (exponents that are multiples of 3). (#786)
- opt_css() method — Define arbitrary CSS rules for an HTML table. (#775)
- Container padding in tab_options() — Set padding around the table container element. (#802, @thriller08)
Bug Fixes
- Refactored internal auto-align code for Pandas 3.0.0 compatibility. (#810)
- Added
intto theRowSelectExprtype definition. (#800, @tylerriccio33) - Updated the Polars selector type annotation to use
Selector. (#770, @schmidma) - Annotated the pipe() method’s first argument type as GT. (#757, @FBruzzesi)
interactive_data_values=is now handled correctly in nanoplots. (#792, @lorenzo-w)- Group labels are now properly modified when
render_formats()is called. (#769, @juleswg23)
Documentation
- Added docs for val_fmt_engineering(). (#808, @jrycw)
- Corrected the
fns=parameter docs in fmt(). (#818) - Improved docs for the from_column() function. (#766, @jrycw)
- Added a gt-extras example to the Examples page. (#759, @juleswg23)
- Added an example demonstrating define_units(). (#446, @jrycw)
Internal
- Updated copyright end year to 2026. (#804)
- Fixed several typos. (#798, @kianmeng)
- Added Plausible analytics to the project website. (#806)
- Added tests for opt_all_caps(). (#812)
- Fixed the checkout version tag in CI. (#768, @juleswg23)
New Contributors
- @kianmeng made their first contribution in https://github.com/posit-dev/great-tables/pull/798
- @thriller08 made their first contribution in https://github.com/posit-dev/great-tables/pull/802
- @schmidma made their first contribution in https://github.com/posit-dev/great-tables/pull/770
- @lorenzo-w made their first contribution in https://github.com/posit-dev/great-tables/pull/792
v0.20.0
2025-10-31 · GitHub
This release adds the grand_summary_rows() method for table-wide aggregation rows and Polars expression support in vals functions.
New Features
- grand_summary_rows() method — Add summary rows at the bottom of the entire table for grand totals and other aggregate statistics. (#765, @juleswg23)
- Polars expressions in
valsfunctions — Thevalsmodule now accepts Polars expressions for more flexible value formatting. (#793)
v0.19.0
2025-10-07 · GitHub
This release removes NumPy from the dependencies list, fixes row_group_as_column to work as intended, and improves color contrast in data_color() and row striping.
Enhancements
- NumPy has been removed as a dependency; all NumPy usage replaced with standard Python. (#749, @tylerriccio33)
row_group_as_column=Truenow correctly structures row groups as a column in the stub (previously a no-op). (#754, @juleswg23)- PyArrow
float64columns are now right-aligned by default, matching Pandas and Polars behavior. (#734, @FBruzzesi)
Bug Fixes
- Fixed an error when setting
groupname_col=withoutrowname_col=in the GT constructor. (#756, @juleswg23) - data_color() now accounts for the alpha value of cell background colors when choosing foreground text color. (#747, @juleswg23)
- Row striping now has better color contrast between text and the cell background. (#745, @juleswg23)
- Column names are now accessed consistently via
get_column_names()instead of.columns. (#736, @FBruzzesi) - Avoided double use of
clearinternally with Polars DataFrames. (#729, @FBruzzesi)
Documentation
- Corrected various typos. (#730, @FBruzzesi)
- Added a Posit badge to the project website header. (#777)
Internal
- Refactored code for better adherence to best practices and improved performance. (#731, @FBruzzesi)
New Contributors
- @FBruzzesi made their first contribution in https://github.com/posit-dev/great-tables/pull/731
v0.18.0
2025-07-10 · GitHub
This release introduces tab_spanner_delim() for automatic spanner creation from delimited column names, rotatable column labels, boolean formatting with fmt_tf(), and custom datetime format strings. Tables can now be pickled for serialization.
New Features
- tab_spanner_delim() method — Automatically create column spanners by splitting column names on a delimiter. (#647)
- cols_label_rotate() method — Rotate column label text 90 degrees for compact headers. (#696, @juleswg23)
- fmt_tf() method — Format boolean values with customizable true/false representations. (#665, #704)
- Custom datetime format strings — fmt_datetime() now accepts a
format_str=parameter for arbitrary datetime formatting. (#645) - Pickle support — GT tables can now be serialized with
pickle. (#641, @jrycw) - Compact currency formatting — fmt_currency() gained a
compact=parameter (e.g.,$13.4M). (#664) truncate=option in data_color() — Truncate values to the domain bounds instead of erroring on out-of-range data. (#673, @mahdibaghbanzadeh)
Enhancements
- Removed the Pandas dependency from vals.fmt_integer(). (#719)
Bug Fixes
- Fixed an off-by-one bug in
rescale_factor()that affected data_color() output. (#718, @juleswg23) - Google Fonts import statements are no longer duplicated in HTML output. (#708)
- Fixed row striping applying to incorrect rows due to an indexing issue. (#701, @juleswg23)
- Spanners can now be correctly styled with tab_style(). (#695, @ChristopherRussell)
- Removed unused
sep_mark=parameter from fmt_scientific(). (#642)
Documentation
- Added note about using
.show("browser")in VS Code. (#643) - Suppressed a cols_width() warning that appeared in the docs. (#659, @jrycw)
- Updated docstrings for date/time formatting methods. (#658)
- Improved interlinking with quartodoc. (#697)
- Added underline to active link in top navigation bar. (#706)
- Improved documentation for as_raw_html(). (#707)
- Better introduction of the show() method via a callout. (#712)
Internal
- Added a no-Pandas dependency test for functions in the
valsmodule. (#689)
New Contributors
- @dpprdan made their first contribution in https://github.com/posit-dev/great-tables/pull/670
- @juleswg23 made their first contribution in https://github.com/posit-dev/great-tables/pull/696
- @ChristopherRussell made their first contribution in https://github.com/posit-dev/great-tables/pull/695
- @mahdibaghbanzadeh made their first contribution in https://github.com/posit-dev/great-tables/pull/673
v0.17.0
2025-03-11 · GitHub
This release adds Quarto integration with a table-processing disable option, a new cols_unhide() method, and ensures unique HTML ID attributes for tables. The css-inline package is now an optional extra.
Breaking Changes
- HTML ID attributes are now unique per table, which may affect code that relied on the previous static ID. (#607, @BenGale93)
- The
css-inlinepackage has been moved to an extras group (pip install great_tables[extra]). (#634)
New Features
- Quarto table-processing option — Disable Quarto’s default table processing and receive a warning on render when needed. (#611)
- cols_unhide() method — Reveal previously hidden columns. (#629, @jrycw)
inline_css=argument — Inline CSS directly on table elements for constrained output contexts. (#633, @tylerriccio33)
Bug Fixes
- Screenshots are no longer always saved as PNG regardless of the specified format. (#599)
- Resolved an encoding issue in
GT.save(). (#609, @jrycw) - Non-integer values are now correctly passed to nanoplot options. (#608, @tylerriccio33)
- Fixed scientific notation zero padding when
exp_style=is used (e.g.,"2.3E-03"was incorrectly displayed as"2.3E−30"). (#622) - Fixed nanoplot code to guard against string values (single string or list containing strings). (#623)
Documentation
- Updated docs for the
mask=parameter in loc.body(). (#589, @jrycw) - Updated the preview of the
yearcolumn in the gtcars dataset. (#587, @jrycw) - Added examples to the documentation. (#618, @jrycw)
- Added style.css entry to the API reference. (#624)
- Aligned the Getting Started guide with the README. (#627, @zachvalenta)
Internal
- Added a
deploy-pypienvironment with deployment protection rules for release workflow review. (#590)
New Contributors
- @tylerriccio33 made their first contribution in https://github.com/posit-dev/great-tables/pull/608
- @BenGale93 made their first contribution in https://github.com/posit-dev/great-tables/pull/607
- @zachvalenta made their first contribution in https://github.com/posit-dev/great-tables/pull/627
v0.16.1
2025-01-24 · GitHub
Great Tables v0.16.1 is a patch release with a single data fix.
Bug Fixes
v0.16.0
2025-01-24 · GitHub
This release introduces the mask= argument for enhanced body cell targeting and a write_raw_html() helper for convenient HTML file output.
New Features
mask=argument in loc.body() — Target specific body cells using a boolean mask for more flexible styling and formatting. (#566, @jrycw)- write_raw_html() helper — Write table HTML output directly to a file without manual string handling. (#485, @jrycw)
Bug Fixes
- Fixed a deprecation warning in as_raw_html() for Python 3.13. (#563, @stinodego)
- Nanoplots now support the
pl.UInttype. (#577, @jrycw)
Documentation
New Contributors
- @stinodego made their first contribution in https://github.com/posit-dev/great-tables/pull/563
v0.15.0
2024-12-14 · GitHub
This release brings several new formatting methods (fmt_flag() for country flags, fmt_icon() for FontAwesome icons), and accounting notation in numeric formatters. PyArrow tables are now experimentally supported as input, as_raw_html() can inline CSS, and the new pipe() method enables functional composition in table-building pipelines.
New Features
- fmt_flag() method — Display country flag icons in table cells based on country codes. (#523)
- fmt_icon() method — Render FontAwesome icons within table cells. (#515)
- Accounting notation — fmt_number(), fmt_percent(), fmt_integer(), and fmt_currency() now support accounting notation for negative values. (#513)
- PyArrow table support (experimental) — Use a
pyarrow.Tableas input data. (#487, @amol-) - Inline CSS in as_raw_html() — New
inline_css=argument writes CSS-inlined HTML strings for email and other constrained environments. (#557) - pipe() method — Chain custom functions in a table pipeline, similar to the Pandas and Polars pipe() APIs. (#363, @jrycw)
- Enhanced
save()method — Now supports intermediate saves by returningself, enabling chained workflows. (#499, @jrycw) - HTTP/HTTPS support in fmt_image() — The
columns=parameter now supports URLs withhttp/httpsschemes. (#520, @jrycw)
Bug Fixes
- Hidden columns with column width definitions no longer mangle HTML table output. (#509)
- Improved detection of Polars installation. (#505, @lukemanley)
- Fixed missing exception raise in
_val_is_numeric()and_val_is_str(). (#510, @jrycw)
Documentation
- Added
CITATION.cffand citation information to the README. (#551) - Updated README with conda install instructions and usage environment details. (#552)
- Improved presentation of Contributing Guidelines. (#550)
- Added information about Pandas requirement when using internal datasets. (#549, #559)
- Included vals.fmt_image() in the API reference. (#486, @jrycw)
- Fixed spelling in the contributing guide. (#516, @glemaitre)
Internal
- Switched to ruff for linting and formatting, and fixed
mypyerrors. (#511, @jrycw) - Standardized imports by converting to relative imports. (#521, @jrycw)
- Added CI build for Python 3.13. (#514, @glemaitre)
- Fixed CI README badge to report build status correctly. (#553)
- Excluded
if TYPE_CHECKING:lines from coverage reports. (#556)
New Contributors
- @lukemanley made their first contribution in https://github.com/posit-dev/great-tables/pull/505
- @glemaitre made their first contribution in https://github.com/posit-dev/great-tables/pull/514
- @amol- made their first contribution in https://github.com/posit-dev/great-tables/pull/487
v0.14.0
2024-11-11 · GitHub
This release adds experimental LaTeX output support, enabling tables to be rendered as LaTeX code for use in scientific documents and publications.
New Features
.as_latex()method (experimental) — Render tables as LaTeX code for inclusion in LaTeX documents and PDF pipelines. See the API reference for current limitations. (#481)
Documentation
v0.13.0
2024-10-04 · GitHub
This release adds granular section restyling via convenience methods, image rendering in non-body components through val_fmt_image(), and the ability to pass a webdriver instance directly to .save().
New Features
- Granular section restyling — Convenience API for restyling individual table sections (header, body, footer, etc.) without touching global options. (#341, @timkpaine)
- val_fmt_image() — Render images in table components beyond the body (e.g., column labels, spanners). (#451, @jrycw)
- Webdriver passthrough in
.save()— Pass an existing webdriver instance to.save()for reuse across multiple exports. (#478)
Bug Fixes
Documentation
- Added google_font() helper to the API reference. (#464, #471, @jrycw)
- Updated docs and code to support
GoogleFontin opt_table_font(). (#470, @jrycw) - Added docstrings for new location methods. (#474, @jrycw)
- Fixed deprecated warning for
pl.DataFrame.pivot(). (#472) - GT members are no longer documented inline on the reference page. (#475)
v0.12.0
2024-09-27 · GitHub
This release adds Google Fonts integration and row striping support, with opt_stylize() now producing striped tables by default.
Breaking Changes
- opt_stylize() now produces row stripes by default. Set
add_row_striping=Falseto remove them. (#461) - opt_stylize() now adds borders to certain styles, matching the original design intent. (#463)
New Features
- google_font() helper — Easily use Google Fonts in opt_table_font() and style.text(). (#423)
- Row striping options — Configure row striping behavior through opt_stylize() and related options. (#461, #463)
Bug Fixes
.show()now uses a full HTML page for correct UTF-8 display. (#458)
Documentation
v0.11.1
2024-09-20 · GitHub
Fixes
- Do not error when URL string supplied to
path=argument in fmt_image() by @jrycw in https://github.com/posit-dev/great-tables/pull/444 - Include an
encoding=arg inGT.save()(with default"utf-8") for more dependable saving in Windows by @jrycw in https://github.com/posit-dev/great-tables/pull/454 - Unify the method signatures of cols_label() and cols_width() by having them both accept
cases=and**kwargsby @jrycw in https://github.com/posit-dev/great-tables/pull/452
Chores
- Standardize on the
GTSelfobject in method signatures by @jrycw in https://github.com/posit-dev/great-tables/pull/431 - Consistently use
isinstance()checks throughout the codebase instead of checking withhasattr()by @rich-iannone in https://github.com/posit-dev/great-tables/pull/434 - Improve test coverage for various
opt_*methods by @jrycw in https://github.com/posit-dev/great-tables/pull/437 - Consolidate ordered list code using the new
_create_ordered_list()function by @jrycw in https://github.com/posit-dev/great-tables/pull/407 - Internally use
OrderedSet().as_list()instead oflist(OrderedSet())for sake of clarity by @jrycw in https://github.com/posit-dev/great-tables/pull/447 - Refactor import statements throughout the
_formats.pyfile by @jrycw in https://github.com/posit-dev/great-tables/pull/450
Docs
- Update import statement in the GT.data_color() example by @jrycw in https://github.com/posit-dev/great-tables/pull/432
- Indicate that tab_spanner() allows for use of units notation in its
label=argument by @rich-iannone in https://github.com/posit-dev/great-tables/pull/426 - Visually document options for theming table with opt_stylize() by @rich-iannone in https://github.com/posit-dev/great-tables/pull/438
- Provide updates to PyCon- and SciPy-related blog posts by @rich-iannone in https://github.com/posit-dev/great-tables/pull/445
Full Changelog: https://github.com/posit-dev/great-tables/compare/v0.11.0…v0.11.1
v0.11.0
2024-08-30 · GitHub
This release restructures the HTML output so that <thead> properly encloses both the title/subtitle and column labels, and fixes .save() compatibility with the latest version of Google Chrome.
Breaking Changes
- The
<thead>element now encloses both title/subtitle and column label rows. This improves semantic correctness but may affect custom CSS targeting the old structure. (#421)
Bug Fixes
.save()now works with the latest version of Google Chrome. (#425)
Documentation
- Mentioned Polars support in the Get Started section. (#408, @jrycw)
- Fixed typos and improved a code example in the “Design Philosophy” doc. (#401, @alfredocarella)
- Fixed a typo in a blog post. (#396)
- Updated documentation for datasets. (#397, @jrycw)
- Updated Polars examples for a deprecated argument. (#400, @atseewal)
- Removed mentions of
accountinginforce_sign=argument docs. (#422)
New Contributors
- @alfredocarella made their first contribution in https://github.com/posit-dev/great-tables/pull/401
v0.10.0
2024-07-08 · GitHub
This release adds units notation support in column labels and spanners, a new opt_table_font() method, the .show() method for interactive display, and several new built-in datasets.
New Features
- Units notation in cols_label() — Express measurement units directly in column labels using the units notation syntax. (#380)
- Units notation in tab_spanner() — Spanner labels can also use units notation for scientific and technical headers. (#393)
- opt_table_font() method — Easily set a default font for the entire table. (#272)
.show()method — Display a table interactively in notebooks and other environments. (#379)- New datasets — Several new built-in datasets added, bringing the total to 16. (#382)
Bug Fixes
- Fixed fmt_percent() issue with Polars
u64-idxbuilds. (#388, @lostmygithubaccount) - Added render target for HTML pages. (#377, @isabelizimm)
.show()no longer raises or prints to stderr. (#384)
Documentation
- Added absolute URLs to README to improve the PyPI project summary. (#373)
New Contributors
- @isabelizimm made their first contribution in https://github.com/posit-dev/great-tables/pull/377
- @lostmygithubaccount made their first contribution in https://github.com/posit-dev/great-tables/pull/388
v0.9.0
2024-06-06 · GitHub
v0.9.0
This release adds row subsetting to data_color(), allowing color scales to be applied to specific rows.
New Features
- Row selection in data_color() — A
rows=argument enables applying color scales to a subset of rows rather than the entire column. (#364, @jrycw)
Breaking Changes
- The
rows=parameter is now the third positional argument in data_color(), which may break code that relied on positional argument order.
v0.8.0
2024-06-06 · GitHub
This release adds method equivalents for several constructor options, allowing them to be set in a chained pipeline rather than only at GT() instantiation.
New Features
- GT.tab_stub() — Set
rowname_col=andgroupname_col=as a method call instead of only in the GT() constructor. (#371) - GT.with_locale() — Set the locale after construction. (#371)
- GT.with_id() — Set the table ID after construction. (#371)
v0.7.0
2024-06-04 · GitHub
This release adds the fmt_units() method for rendering scientific units and improves Polars selector compatibility.
New Features
- fmt_units() method — Format measurement units with proper subscripts, superscripts, and symbols for scientific notation. (#240)
- Non-strict Polars
expand_selector()support — Polars selectors now use non-strict mode, avoiding errors when selectors match no columns. (#368)
Bug Fixes
- General enhancements and fixes to several
cols_*()methods. (#366, @jrycw) - Better error message when list data is used incorrectly in fmt_nanoplot(). (#356, @marcozzxx810)
Documentation
Internal
v0.6.1
2024-05-23 · GitHub
Great Tables v0.6.1 is a patch release fixing compatibility with Polars v0.20.28 and screenshot export for non-PNG formats.
Bug Fixes
Internal
v0.6.0
2024-05-16 · GitHub
This release introduces multi-level spanners, allowing column spanners to be nested hierarchically. Table export via .save() is now more robust.
New Features
- Multi-level spanners — Column spanners can now be nested under other spanners to create hierarchical column groupings. (#345, @timkpaine)
Bug Fixes
.save()now always captures the full table when exporting. (#344)
Documentation
New Contributors
- @timkpaine made their first contribution in https://github.com/posit-dev/great-tables/pull/345
v0.5.2
2024-05-13 · GitHub
Great Tables v0.5.2 is a patch release addressing several bugs in borders, image formatting, and nanoplots.
Bug Fixes
- CellStyleBorders is now properly constructed when sides is set to
"all". (#326, @jrycw) - fmt_image() no longer errors on missing values. (#329)
- Nanoplots now work with list columns, and Polars list columns no longer raise an error. (#330)
- Nanoplots no longer fail for lists of large integers. (#335)
- fmt_number() no longer inserts an improper comma for 3-digit compact, negative numbers. (#335)
Documentation
Internal
- Removed unused
webcolorslibrary as a required dependency. (#336, @marcozzxx810)
New Contributors
- @marcozzxx810 made their first contribution in https://github.com/posit-dev/great-tables/pull/336
v0.5.1
2024-05-03 · GitHub
Great Tables v0.5.1 is a maintenance release focused on bug fixes, code quality improvements, and documentation. Special thanks to @jrycw for an incredible number of contributions.
Bug Fixes
table_font_color=in tab_options() now correctly accepts named colors. (#285, @jrycw)- Group label rows now produce valid HTML. (#308)
- Fixed Polars selectors error in cols_hide(). (#316, @jrycw)
- fmt_number() now handles missing values correctly. (#317, @jrycw)
- Fixed display of integer-like values in nanoplots. (#319, @jrycw)
Documentation
Internal
- Cleaned up implementation of fmt_nanoplot() and data_color(). (#294, #295, @jrycw)
- Refactored fmt_time(), fmt_date(), and fmt_datetime(). (#290, @jrycw)
- Refactored
lettersandLettersfunctions in helpers. (#289, @jrycw) - Updated type hints and organized imports. (#315, @jrycw)
- Codebase cleanup and minor improvements. (#292, #305, @jrycw)
- Improved test coverage. (#311, #325, @jrycw)
- Added tests for cols_align() and extended Polars expression support. (#320, @jrycw)
v0.5.0
2024-04-12 · GitHub
This release significantly reduces the dependency footprint by removing mizani and pandas as required dependencies, adds substitution methods for missing and zero values, and provides webdriver choice in .save().
New Features
- sub_missing() and sub_zero() methods — Substitute missing or zero values with custom text or symbols. (#244)
- Webdriver selection in
.save()— Choose between different webdrivers (e.g., Chrome, Firefox) when saving tables as images. (#262)
Enhancements
Bug Fixes
Documentation
Internal
v0.4.0
2024-03-15 · GitHub
This release introduces nanoplots (small inline plots embedded directly in table cells) and adds Polars selector support to all fmt_*() methods.
New Features
Bug Fixes
- Improved HTML representation of tables for better rendering. (#233)
- Header component HTML tags now pass HTML validation. (#235)
- The
'transparent'color (and other named colors) now works intab_options(table_background_color=). (#242) - Fixed a render reorder issue that caused incorrect row groupings. (#218)
Documentation
- Fixed the opt_horizontal_padding() example. (#215)
v0.3.1
2024-02-27 · GitHub
This release adds table export capabilities with .save() and .as_raw_html(), plus two new styling convenience methods. Several data_color() edge cases are now handled correctly.
New Features
.save()and.as_raw_html()methods — Export tables to HTML files or retrieve raw HTML strings for embedding. (#208)- opt_stylize() method — Apply one of several pre-built table themes with a single method call. (#198)
- opt_table_outline() method — Add or customize the table’s outer border. (#209)
Bug Fixes
- Fixed row rendering order to iterate over sorted rows. (#202)
np.nanvalues are now correctly replaced with thena_color=value in data_color(). (#205)- data_color() now handles edge cases with single-value columns and all-missing columns. (#213)
Documentation
- Added the
v0.3.0release blog post. (#200) - Added documentation on table themes. (#197)
- Added docs for the fmt_image() method. (#216)
Internal
- Removed type annotations from docstrings. (#207)
v0.3.0
2024-02-16 · GitHub
This release brings extensive table customization with tab_options() for global styling, cols_width() for column sizing, fmt_image() for embedding images, and several convenience methods for common styling patterns. ColorBrewer palettes are now available in data_color().
New Features
- tab_options() method — Configure global table styling options including fonts, colors, padding, and borders. (#146)
- cols_width() method — Set explicit column widths using absolute or relative values. (#143)
- fmt_image() method — Embed images directly in table cells from file paths or URLs. (#163)
- opt_align_table_header() method — Quickly align the table header to the left, center, or right. (#147)
- opt_all_caps() method — Apply all-caps styling to column labels, spanner labels, or stub text. (#150)
- Vertical and horizontal padding options — New
opt_*methods for adjusting cell padding. (#154) - system_fonts() helper — Access curated system font stacks for use in table options. (#158)
- ColorBrewer palettes in data_color() — Use any ColorBrewer palette for data-driven coloring. (#186)
Bug Fixes
Enhancements
- Added
py.typedmarker to support PEP 561 type-checking. (#139, @sugatoray)
Documentation
New Contributors
- @sugatoray made their first contribution in https://github.com/posit-dev/great-tables/pull/139
- @jrycw made their first contribution in https://github.com/posit-dev/great-tables/pull/189
v0.2.0
2024-01-24 · GitHub
This release introduces the data_color() method for applying color scales to table data, along with several bug fixes for frame validation and spanner columns.
New Features
- data_color() method — Apply color scales to columns based on their underlying data values, with support for custom palettes and domains. (#109)
Bug Fixes
Enhancements
- Internal use of
to_list()as a cross-DataFrame solution for better Pandas/Polars compatibility. (#128)
Documentation
- Added a guide for data_color() and an introductory blog post for the new version. (#131)
- Published a blog post on Polars styling. (#113)
New Contributors
- @atseewal made their first contribution in https://github.com/posit-dev/great-tables/pull/111
v0.1.5
2024-01-05 · GitHub
This release adds fmt_datetime() for date-time formatting and generalizes row selection across all methods that accept a rows= argument.
New Features
- fmt_datetime() method — Format datetime values in the table body with flexible date-time patterns. (#101)
- Generalized row selectors — All
rows=arguments now accept a function that operates on a DataFrame, making row selection in Pandas much easier. (#107)
Documentation
- Published an introductory blog post for Great Tables. (#105)
v0.1.4
2023-12-19 · GitHub
This release adds data-driven styling via style.from_column(), fixes column hiding and style application, and improves the documentation site.
New Features
style.from_column()— Apply styles dynamically based on column values, implemented for loc.body(). (#83)
Enhancements
- tab_style() now accepts lists of styles and lists of locations. (#87)
- The compiled CSS ID value is now correctly applied to all rules. (#92)
Bug Fixes
- Fixed cols_hide() not working correctly. (#86)
Documentation
v0.1.3
2023-12-12 · GitHub
This release introduces the tab_style() method for targeted cell styling and includes several fixes to table rendering and source notes.
New Features
- tab_style() method — Apply custom styles to specific cells, columns, or rows using location selectors. (#68)
Enhancements
- loc.body() now defaults to all columns and rows when called without arguments. (#79)
- tab_source_note() now works correctly with md() and html() helpers. (#77)
Bug Fixes
- Fixed handling of addition operations in the SCSS template. (#72)
Documentation
- Added hyperlinks in a table example. (#70, @kmasiello)
Internal
- Added pre-commit checks to CI. (#78)
New Contributors
- @kmasiello made their first contribution in https://github.com/posit-dev/great-tables/pull/70
v0.1.2
2023-12-07 · GitHub
This release adds Shiny integration for Great Tables, enabling interactive table rendering in Shiny for Python applications — including support for Shinylive.
New Features
- Shiny support — A new
great_tables.shinymodule providesoutput_gt()andrender_gt()for rendering GT tables in Shiny for Python apps. (#59)
Enhancements
- Replaced
libsassdependency withwebcolors, enabling Great Tables to run in Shinylive. (#61)
Documentation
- Fixed code example in README.md. (#62)
v0.1.1
2023-12-06 · GitHub
Great Tables v0.1.1 is a maintenance release with bug fixes, improved test coverage, and a reorganization of built-in datasets.
Enhancements
Bug Fixes
Internal
v0.1.0
2023-12-04 · GitHub
This release rounds out the initial API, delivering full table structuring with spanners, row groups, and stub labels. Formatting methods are now complete with locale support, Polars DataFrames and selectors are fully supported, and the new vals submodule enables value formatting outside of a table context.
New Features
- Spanners, row groups, and stub labels — Tables can now be structured with column spanners, row groups, and stub labels for richer hierarchical layouts.
- Polars support — Polars DataFrames are accepted as input data, and Polars selectors (e.g.,
cs.starts_with) can be used for column targeting. valssubmodule — Format values outside of a table context using the same formatting engine available infmt_*()methods.
Enhancements
- Formatting methods are now fully fleshed out with comprehensive locale support for number, currency, and date/time formatting.
Documentation
- Added a Get Started guide to the documentation site.
- Added many examples throughout the API reference.
v0.0.2
2023-11-10 · GitHub
This release introduces the foundational GT object with core table-building capabilities, including value formatting, header content, and annotation methods.
New Features
- GT class — A top-level table object providing the primary interface for building and customizing tables.
fmt_*()methods — A comprehensive set of formatting methods for transforming cell values in the table body.- Title and note methods — Methods for adding titles, subtitles, and table notes to provide context and annotations.
Internal
- Groundwork for spanners, row columns, and group columns (to be exposed in a future release).