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 Polars Duration dtype 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 nan values. (#838)
  • Removed the internal NpNan backend in favor of expanded normalization logic. (#840)

Documentation

  • Added a SEPTA timetable blog post demonstrating real-world table construction. (#636)
  • Fixed a formatting issue in the fmt_threshold() docstring. (#821)
  • Migrated the documentation site to Great Docs as the website generator. (#842)
  • Updated the User Guide with coverage of new features. (#843)

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

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 int to the RowSelectExpr type 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

Internal

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 vals functions — The vals module 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=True now correctly structures row groups as a column in the stub (previously a no-op). (#754, @juleswg23)
  • PyArrow float64 columns are now right-aligned by default, matching Pandas and Polars behavior. (#734, @FBruzzesi)

Bug Fixes

  • Fixed an error when setting groupname_col= without rowname_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 clear internally 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 stringsfmt_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 formattingfmt_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

Bug Fixes

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 vals module. (#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-inline package 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

Internal

  • Added a deploy-pypi environment 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

  • Updated the year column dtype in the gtcars dataset. (#586)

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

Documentation

  • Added pyOpenSci and DOI badges to the README to acknowledge successful peer review. (#576)
  • Updated images and text for included datasets. (#562)
  • Replaced JSON dataset with .ndjson file in coffee sales examples to fix a serialization error. (#580)

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 notationfmt_number(), fmt_percent(), fmt_integer(), and fmt_currency() now support accounting notation for negative values. (#513)
  • PyArrow table support (experimental) — Use a pyarrow.Table as 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 returning self, enabling chained workflows. (#499, @jrycw)
  • HTTP/HTTPS support in fmt_image() — The columns= parameter now supports URLs with http/https schemes. (#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.cff and 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 mypy errors. (#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

  • Improved API reference layout on lower-width devices. (#427, #492)
  • Added preview sections for built-in datasets. (#453, @jrycw)

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

  • Global locale is now respected in all fmt_*() methods. (#473, @jrycw)
  • Fixed headers causing their CSS classes to be printed in the output. (#477)

Documentation

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=False to remove them. (#461)
  • opt_stylize() now adds borders to certain styles, matching the original design intent. (#463)

New Features

Bug Fixes

  • .show() now uses a full HTML page for correct UTF-8 display. (#458)

Documentation

  • Updated the Super Bowl example to align with the latest version of Polars. (#460, #462, @jrycw)

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 in GT.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 **kwargs by @jrycw in https://github.com/posit-dev/great-tables/pull/452

Chores

  • Standardize on the GTSelf object 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 with hasattr() 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 of list(OrderedSet()) for sake of clarity by @jrycw in https://github.com/posit-dev/great-tables/pull/447
  • Refactor import statements throughout the _formats.py file 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 accounting in force_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

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

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

Documentation

Internal

  • Refactored seq_groups() to accept Iterable. (#365, @jrycw)
  • Moved pairwise(), seq_groups(), and is_equal() to _utils.py. (#369, @jrycw)

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

  • Fixed column selections breaking with Polars v0.20.28. (#360, @jrycw)
  • Fixed _save_screenshot() failing for non-PNG file formats. (#352, @jrycw)

Internal

  • Enhanced test coverage. (#339, @jrycw)
  • Removed unneeded files. (#351)

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

  • Added an example coffee table with nanoplots. (#349)
  • Cleaned up minor formatting issues in the docs. (#338, @jrycw)

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

  • Added examples to API reference pages. (#328, @jrycw)

Internal

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

Documentation

Internal

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

  • Removed mizani and pandas as required dependencies, making the package lighter and more flexible. (#261, #271)

Bug Fixes

  • Fixed incorrect passing of nanoplot options to arguments in _generate_nanoplot(). (#258)
  • Removed uses of DataFrame.apply and deprecated dtype methods for better compatibility. (#277)
  • Closed file handles that were left open. (#281)

Documentation

  • Added examples for fmt_nanoplot(). (#245)
  • Added docs site and Codecov badges to the README. (#254)
  • Improved examples in the Examples section. (#267)
  • Fixed variable names in the Oceania example. (#264)
  • Added warning callout for experimental status. (#243)

Internal

  • Refactored nanoplot internals. (#246)
  • Added more tests for formatting methods. (#260)
  • Added CodeCov integration to CI. (#250)
  • Updated supported Python versions list to match those tested. (#269)

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

  • Nanoplots — Embed small inline plots (sparklines, bar charts, etc.) directly within table cells for at-a-glance data visualization. (#219)
  • Polars selectors in fmt_*() methods — Use Polars selectors like cs.starts_with() to target columns in any formatting method. (#217)

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 in tab_options(table_background_color=). (#242)
  • Fixed a render reorder issue that caused incorrect row groupings. (#218)

Documentation

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.nan values are now correctly replaced with the na_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.0 release 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

  • Replaced deprecated with_row_count with with_row_index for Polars compatibility. (#189, @jrycw)
  • Table font names in tab_options() now accept both a string and a list. (#155)
  • Fixed FutureWarning for DataFrameGroupBy.grouper. (#193, @jrycw)

Enhancements

  • Added py.typed marker to support PEP 561 type-checking. (#139, @sugatoray)

Documentation

  • Added example using sza dataset with data_color(). (#136)
  • Published a Super Bowl blog post. (#184, #185)
  • Added sports examples to the docs. (#195)
  • Cleaned up examples in the API docs. (#191)
  • Fixed a column name in the Column Labels documentation. (#187, @jrycw)

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

  • Fixed tab spanner column name resolution. (#111, @atseewal)
  • Fixed frame validation to handle edge cases. (#118)
  • Frame validation now coerces non-string column names. (#127)

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

Documentation

  • Examples now display in a single column on narrow screens. (#81)
  • Added a Get Started page on styling. (#88)
  • Added interlinks throughout the documentation site. (#97)

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

Bug Fixes

  • Fixed handling of addition operations in the SCSS template. (#72)

Documentation

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.shiny module provides output_gt() and render_gt() for rendering GT tables in Shiny for Python apps. (#59)

Enhancements

  • Replaced libsass dependency with webcolors, 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

  • Datasets (except exibble) are no longer exported from the top-level module; a data submodule is now the access point for all built-in datasets. (#57)

Bug Fixes

  • Column selections now correctly exclude columns that are in the stub. (#49)
  • Several rendering issues were fixed. (#58)

Internal

  • Dataclasses are now frozen for improved immutability. (#50)
  • Added several tests and incorporated pytest-cov for coverage reporting. (#53, #54, #55)

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.
  • vals submodule — Format values outside of a table context using the same formatting engine available in fmt_*() 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).