
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.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 26 Oct 2026, one day before this check.
Latest release v1.1.0 on 15 Oct 2026.
Public since May 2022, a little over 4 years.
2,911 stars and 146 forks.
743 commits and 24 new issues in the last 90 days.
48 contributors. 158 pull requests merged in 90 days.
No security policy file says how to report a problem. No published security advisories.
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.
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 method | What it needs | Effort |
|---|---|---|
| PyPI | The PyPI package index, installed with one command | One command |
| Conda-Forge | A conda environment, installed with one command | One 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.
- 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.
- 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.
python3 -m venv ~/tables-env source ~/tables-env/bin/activate pip install great_tables

