NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1760 most downloaded on PyPI
Format agnostic tabular data library (XLS, JSON, YAML, CSV, etc.)
Last release 2 months ago
31 Jul 2026
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 50 of 51 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
51 releases · first in 2011
Escape dataset title in HTML serialization ( #668 ) @claudep
#yaml tag from generic error message URL (#641) @mgrdcmHeadersNeeded instead of TypeError when subscripting a headerless Dataset by column name (#648) @gaoflowOne column per quarter.
Add dataset title adjustment for xls format ( #627 ) @TheSuperiorStanislav
See GitHub Releases:
Add support for column_width in xlsx format by @Birdi7 in #516
column_width in xlsx format by @Birdi7 in #516Dataset.load() by @AmitAronovitch in #604Full Changelog: v3.7.0...v3.8.0
Dataset.load() (#604)Add support for Python 3.13 by @hugovk in #592
import_set/book by @Viicos in #591Full Changelog: v3.6.1...v3.7.0
import_set/book (#591)Add optional requirement specifier "html" back by @mdellweg in #589
tablib[html] in some cases (#588).Replace MarkupPy by ElementTree for html conversion by @claudep in #554
transpose support dataset with no headers by @sgqy in #560import datetime as import datetime as dt by @hugovk in #569src/tablib/packages/dbfpy to src/tablib/_vendor/dbfpy by @hugovk in #570Full Changelog: v3.5.0...v3.6.0
transpose() method can be called on datasets without headers.None Python values are now converted to the empty string by the ODS formatter.Release: replace deprecated repository_url with repository-url by @hugovk in #545
repository_url with repository-url by @hugovk in #545open() on path objects directly by @claudep in #548Full Changelog: v3.4.0...v3.5.0
repository_url with repository-url (#545)Fix deploy warning by @hugovk in #531
HISTORY.md for next release by @matthewhegarty in #544Full Changelog: v3.3.0...v3.4.0
pyproject.toml (#542)Add support for Python 3.11 by @hugovk in #525
Add newline to StringIO by @matthewhegarty in #518
Full Changelog: v3.2.0...v3.2.1
Test Python 3.10 on all operating systems by @hugovk in https://github.com/jazzband/tablib/pull/508
Full Changelog: https://github.com/jazzband/tablib/compare/v3.1.0...v3.2.0
safe_xlsx_sheet_title (#510).Update release checklist by @hugovk in https://github.com/jazzband/tablib/pull/486
Full Changelog: https://github.com/jazzband/tablib/compare/v3.0.0...v3.1.0
skip_lines keyword
argument for their import_set() method to be able to skip the nth first
lines of a read file (#497).csv.Sniffer() in _csv.detect() (#503).JSON-exported data is no longer forced to ASCII characters.
The Row.lpush/rpush logic was reversed. lpush was appending while rpush and append were prepending. This was fixed (reversed behavior). If you counted
Row.lpush/rpush logic was reversed. lpush was appending while rpush
and append were prepending. This was fixed (reversed behavior). If you
counted on the broken behavior, please update your code (#453).Upcoming breaking change in Tablib 2.0.0: the Row.lpush/rpush logic is reversed. lpush is appending while rpush and append are prepending. The broken…
Row.lpush/rpush logic is reversed.
lpush is appending while rpush and append are prepending. The broken behavior
will remain in Tablib 1.x and will be fixed (reversed) in Tablib 2.0.0 (#453). If you
count on the broken behavior, please update your code when you upgrade to Tablib 2.x.Dependencies are now all optional. To install tablib as before with all possible supported formats, run pip install tablib[all]
tablib as before with all
possible supported formats, run pip install tablib[all]tablib.formats.registry.refister API (#256).detect_format, import_set,
Dataset.load, Databook.load) now accepts file-like objects in addition
to raw strings and bytestrings (#440).The 0.14.x series will be the last to support Python 2
DataBook().load parameter ordering (first stream, then format).xls format)Stopped calling openpyxl deprecated methods (accessing cells, removing sheets) (openpyxl minimal version is now 2.4.0)
ujson (#311)Favor Dataset.export( ) over Dataset. syntax in docs
Dataset.export(<format>) over Dataset.<format> syntax in docsAdd initial Panda DataFrame support
Use yaml.safe_load for importing yaml.
yaml.safe_load for importing yaml.Use built-in json package if available
json package if available- Release fix.
### Bugfixes - Fix export only formats. - Fix for xlsx output.
Fixed packaging error on Python 3.
Added LaTeX table export format (Dataset.latex).
Dataset.latex).Dataset.dbf).Dataset.export(), Dataset.load()).Dataset.export('csv', delimiter='$')).Dataset.remove_duplicates()).datetime.datetime issues when serializing data.detect_format() function (mostly for internal use).None handling.detect() function removed.Dataset.transpose().transpose().* Unicode Column Headers * ALL the bugfixes!
* Bugfixes
* Bugfixes
stack_rows => stack, stack_columns => stack_cols
stack_rows => stack, stack_columns => stack_colsappend_col, insert_col)pop()rpush, lpush, rpop, lpop, rpush_col, and lpush_colOpenDocument Spreadsheet support (.ods)
* Full XLSX Support! * Pickling Bugfix * Compat Module
seperators renamed to separators
seperators renamed to separatorsPython 3.1, Python 3.2 Support (same code base!)
Caved to community pressure (spaces)
* Databook duplication leak fix. * HTML Table output. * Added column sorting.
Transpose method added to Datasets.
Minor reference shadowing bugfix.
Row tagging and Dataset filtering!
Updated XLS output: Only wrap if '\\n' in cell.
Ability to append new column passing a callable as the value that will be applied to every row.
Added alignment wrapping to written cells.
* Packaging Fix
* New format plugin system! * Imports! ELEGANT Imports! * Tests. Lots of tests.
Reverting methods back to properties.
Renamed DataBook Databook for consistency.
Updated unicode export for XLS.
Added Dataset.append() support for columns.
Fixed Dataset.append() error on empty dataset.
* Packaging hotfixes.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →