Data and databases · Edition No. 12 · 6 Sep 2026

posit-dev/great-tables

Display tables in Python with titles, spanners, footnotes and real number formatting — from a pandas or Polars frame.

← Data and databasesRead the whole edition →
12

posit-dev/great-tables

💎 hidden gem
Great Tables: tables worth reading. Turns a table of numbers into a real table.

2.7k stars · MIT · v0.24.0 (2026-08-24) · Track this in Rising ↗

Display tables in Python with titles, spanners, footnotes and real number formatting — from a pandas or Polars frame.

Verified27 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive100

Last code pushed 26 Oct 2026, one day before this check.

Releases100

Latest release v1.1.0 on 15 Oct 2026.

Maturity70

Public since May 2022, a little over 4 years.

Adoption69

2,911 stars and 146 forks.

Activity100

743 commits and 24 new issues in the last 90 days.

Community80

48 contributors. 158 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence MIT: permissive: use it for anything, keep the noticeSetup effort 2 of 5Payoff 3 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 27 Oct 2026 from the repository on GitHub. Covered in Edition 12.

▶Repo detailsthe review · specs · pros & cons · install

What it does

You pass it a pandas or Polars dataframe and describe the table you want: a title and subtitle, a stub column down the left, spanner headings grouping columns together, footnotes attached to particular cells, and a source note underneath. Numbers are formatted by meaning rather than by hand, so percentages print as percentages, currencies as currencies and large numbers with separators. Cells can be coloured by value. The output is HTML, which drops straight into a web response or an email, and it can also be saved as an image or as LaTeX. The package on PyPI is 1.0.0, published on 25 September 2026, and the newest tag in the repository is v1.1.0 from 15 October 2026, under the MIT licence. It is a display library only: there is no sorting, no filtering and no interactivity, and it does no analysis.

Why it matters

Who it suits. Anyone whose Python output is read by somebody other than its author: a table in a report, a figure in a blog post, a summary in an email, a frame in a video. A raw dataframe print reads as an unfinished side project in exactly the way mismatched icons do on a web page. Skip it if the table needs to be sorted or filtered by the reader, because that is a different kind of component.

Verdict. An afternoon to learn and then thirty lines per table, which is a good trade for anything a customer or a colleague reads. The version-1.0 release is the real news here, because the library was at 0.24.0 when this edition first appeared and a version below 1.0 makes people wait. The interface borrows its vocabulary from R's gt, so the names feel unfamiliar for the first hour. Saving to an image needs a headless browser installed on the machine, which is worth checking before relying on it in an automated job. For interactive tables, Perspective above is the answer; Textualize/rich is better for terminal output.

Stars2.7k
LicenceMIT
Latestv0.24.0 (2026-08-24)checked 7 Sep 2026
Written inPython
RunsLocally, on your own machine
Summary (Key Points)from the README
Key features
  • Pandas and Polars input: Tables are built from a Pandas or Polars DataFrame.
  • Composable table parts: Mix headers, footers, stubs (row labels) and spanner labels above column labels.
  • Cell value formatting: Format cell values in a variety of ways within the table.
  • HTML or image output: Tables render to HTML by default or to an image file.
  • Notebook and Quarto friendly: Designed for use in a notebook or Quarto document.
  • Browser preview: Calling show() on a table in the console opens the HTML table in your default browser.
  • Built-in sample data: 16 included datasets, such as sp500, gtcars, countrypops and pizzaplace, for experimenting.
  • Layered documentation: Introductory articles plus a Reference section covering every method and function.
Ways to install
Platform or methodWhat it needsEffort
PyPIThe PyPI package index, installed with one commandOne command
Conda-ForgeA conda environment, installed with one commandOne command
Important
  • No console printing: Tables won't print to the console, so use show() or view them in a notebook or Quarto document.
  • Maintainer concentration: The project is primarily maintained by one person, Rich Iannone, with occasional help from other authors.
  • Bug reports: Problems and feature ideas go through the issue tracker, and usage questions go to GitHub Discussions or Discord rather than a support channel.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
2 / 5
Payoff
3 / 5
Good
  • Real table structure, with titles, spanners, footnotes and source notes rather than a grid of strings.
  • HTML output drops straight into a web response or an emailed report.
  • MIT, and now at a 1.0 release, so the interface is settled.
Watch for
  • Display only: no sorting, no filtering and no interactivity.
  • The vocabulary is borrowed from R's gt, so it takes an afternoon to feel natural.
  • Saving to an image needs a headless browser installed, which is another dependency on a server.
Install
python3 -m venv ~/tables-env
source ~/tables-env/bin/activate
pip install great_tables
Screenshots
posit-dev/great-tables: GitHub preview cardposit-dev/great-tables: Screenshot 1

On Stack Radar: Data & Research › Analytics & Business Intelligence › Dashboards.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.