NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #118 most downloaded on PyPI
Measures the displayed width of unicode strings in a terminal
Last release 11 days ago
23 Sep 2026
Ships unpredictably
gaps range from 8 days to 1.7 years
Most releases are documented
notes for 38 of 46 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
46 releases · first in 2014
bugfix width() value for very long CSI sequences (0.9.0 regression!) by @jquast in #272
Full Changelog: 0.9.0...0.9.1
Use Python extension with libwcwidth by @jquast in #248
Full Changelog: 0.8.5...0.9.0
One column per quarter.
Measure hyphen break positions by display width by @jakezwang in #262
Full Changelog: 0.8.4...0.8.5
bugfix: restore ITU T.416 colon-format colors with colon separators by @jquast in #243
Full Changelog: 0.8.3...0.8.4
Fix hang wrapping OSC-8 hyperlinks with wide graphemes by @jquast in #232
bugfix: IndexError when 'n' exceeds length by @gaoflow in https://github.com/jquast/wcwidth/pull/228
Full Changelog: https://github.com/jquast/wcwidth/compare/0.8.1...0.8.2
Full Changelog: 0.8.1...0.8.2
Improved corrections tables by @jquast in https://github.com/jquast/wcwidth/pull/226
Full Changelog: https://github.com/jquast/wcwidth/compare/0.8.0...0.8.1
New support for Variation Selector 15 Emojis as narrow, #211.
term_program for wcstwidth(), width(), clip(), wrap(), ljust(), rjust(), and center(). False disables corrections; True auto-detects by TERM_PROGRAM or TERM; string values accept canonical names matching list_term_programs(). wcstwidth()_ defaults to True; all other functions default to False.jacobsandlund/uucode_ (ghostty) #223.Full Changelog: https://github.com/jquast/wcwidth/compare/0.7.0...0.8.0
New support for kitty text sizing protocol (OSC 66) in width() and clip() .
width() and clip().clip() parameter control_codes='parse', 'ignore', and 'strict'. clip()clip() and width() to support horizontal cursor sequences (cub, cuf,hpa). Cursor-left (cub) or backspace (\b) now overwrites text. column_addresshpa) and carriage return (\r) are now parsed, and more values conditionally raiseValueError when control_codes='strict'.Full Changelog: 0.6.0...0.7.0
Complete textwrap.wrap() with 6 missing params! by @jquast in #207
Full Changelog: 0.5.3...0.6.0
Add Virama conjunct for the Brahmic scripts by @jquast in #204
Full Changelog: 0.5.2...0.5.3
Do not distribute any data files by @jquast in #199
Drop Support of many historical versions of wide and zero unicode tables. Only the latest Unicode version (17.0.0) is now shipped. The related unicode
unicode_version='auto' keyword of the wcwidth()-family of functions are ignored. list_versions() always returns a tuple of only a single element of the only unicode version supported. #195propagate_sgr() for applying SGR state propagation to a list of lines. #194wrap() and clip() with propagate_sgr=True. #194clip() zero-width characters at clipping boundaries. #194wrap(). #193Full Changelog: 0.4.0...0.5.0
Bugfix: OSC Hyperlinks should not be broken by wrap() by @jquast in #191
wrap() by @jquast in #191iter_graphemes_reverse(), grapheme_boundary_before() by @jquast in #192Full Changelog: 0.3.5...0.4.0
Re-stamp package version correctly, 0.3.4 packaged a failing test
Full Changelog: https://github.com/jquast/wcwidth/compare/0.3.4...0.3.5
bugfix our center() padding algorithm by @jquast in https://github.com/jquast/wcwidth/pull/188
Full Changelog: https://github.com/jquast/wcwidth/compare/0.3.3...0.3.4
Add fast path for ASCII printables to width() by @hugovk in https://github.com/jquast/wcwidth/pull/185
width() by @hugovk in https://github.com/jquast/wcwidth/pull/185py.typed file and Typing :: Typed classifier by @hugovk in https://github.com/jquast/wcwidth/pull/184Full Changelog: https://github.com/jquast/wcwidth/compare/0.3.2...0.3.3
type hinting for full mympy --strict compliance, by @penguinolog https://github.com/jquast/wcwidth/pull/183
mympy --strict compliance, by @penguinolog https://github.com/jquast/wcwidth/pull/183Full Changelog: https://github.com/jquast/wcwidth/compare/0.3.1...0.3.2
Add benchmarking using codspeed.io by @jquast in https://github.com/jquast/wcwidth/pull/180
Full Changelog: https://github.com/jquast/wcwidth/compare/0.3.0...0.3.1
Major changes since 0.2.14, in order
Major changes since 0.2.14, in order
Full Changelog: https://github.com/jquast/wcwidth/compare/0.2.14...0.3.0
Drop Support for Python 2.7 and 3.5. PR #117.
0.2.14 2025-09-22
Full Changelog: https://github.com/jquast/wcwidth/compare/0.2.13...0.2.14
Bugfix zero-width support for Hangul Jamo (Korean) #111
Remove a .pyi file was misplaced in the wheel file distributed on pypi for 0.2.11, issue #101
Remove a .pyi file was misplaced in the wheel file distributed on pypi for 0.2.11, issue #101
Include tests files in the source distribution (PR #98, PR #100).
Include tests files in the source distribution (PR #98, PR #100).
Bugfix accounting of some kinds of emoji sequences using U+FE0F Variation Selector 16 (PR #97).
0.2.10 2023-11-13
Bugfix zero-width characters used in Emoji ZWJ sequences, Balinese, Jamo, Devanagari, Tamil, Kannada and others (PR #91).
Include requirements files in the source distibution (PR #83).
Full Changelog: https://github.com/jquast/wcwidth/compare/0.2.7...0.2.8
Update Unicode version to 15.1.0 by @GalaxySnail in https://github.com/jquast/wcwidth/pull/77
Full Changelog: https://github.com/jquast/wcwidth/compare/0.2.6...0.2.7
Fix example for str.rjust(20, '_') by @RasmusWL in https://github.com/jquast/wcwidth/pull/43
Full Changelog: https://github.com/jquast/wcwidth/compare/0.2.5...0.2.6
Do not depend on pkg_resources module for list_versions() function.
pkg_resources module for list_versions() function.minor "bugfix" to avoid using pkg_resources module on import, 7918f581feedeaa4246dc0fc03ec6fb49cff15cb
Nothing published for this version
PR #23: Support all versions of Unicode, using the UNICODE_VERSION environment variable, when defined, or, for non-shells, explicitly by passing argum
PR #23: Support all versions of Unicode, using the UNICODE_VERSION environment variable, when defined, or, for non-shells, explicitly by passing argument unicode_version to the wcwidth family of functions.
A demonstration utility that determines the Terminal's Unicode Version is made available as a separate package, https://github.com/jquast/ucs-detect/ which contains a Problem and Solution statement.
Nothing published for this version
Nothing published for this version
Performance optimization by @avylove , PR #35.
Nothing published for this version
Updated tables to Unicode Specification 9.0.0. (PR #18).
Nothing published for this version
Deprecated: The module path wcwidth.table_comb is no longer available, it has been superseded by module path wcwidth.table_zero.
Feature: wcswidth() now determines printable length for (most) combining characters. The developer's tool bin/wcwidth-browser.py is improved to displa
0.1.4
wcswidth() now determines printable length
for (most) combining characters. The developer's tool
bin/wcwidth-browser.py is improved to display combining
characters when provided the --combining option
(@thomasballinger and @lmontopo PR #5)._Bugfix_: 2nd parameter of wcswidth was not honored. (@thomasballinger PR #4).
Updated tables to Unicode Specification 7.0.0 (PR #3)
0.1.2
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →