# Changelog

You can test the unpublished version of cihai-cli before it's released, see
[developmental releases](https://cihai-cli.git-pull.com/quickstart.html#developmental-releases).

[pip](https://pip.pypa.io/en/stable/):

```console
$ pip install --user --upgrade --pre cihai-cli
```

[pipx](https://pypa.github.io/pipx/docs/):

```console
$ pipx install \
    --suffix=@next \
    --pip-args '\--pre' \
    --force \
    'cihai-cli'
```

Then run the suffixed command as `cihai@next info 好`.

[uv](https://docs.astral.sh/uv/getting-started/features/#python-versions):

```console
$ uv add cihai-cli --prerelease allow
```

[uvx](https://docs.astral.sh/uv/guides/tools/):

```console
$ uvx --from 'cihai-cli' --prerelease allow cihai
```

## cihai-cli 0.34.x (unreleased)

<!-- KEEP THIS PLACEHOLDER - DO NOT REMOVE OR MODIFY THIS LINE -->
_Notes on the upcoming release will go here._
<!-- END PLACEHOLDER - ADD NEW CHANGELOG ENTRIES BELOW THIS LINE -->

## cihai-cli 0.33.0 (2026-06-28)

cihai-cli 0.33.0 refreshes the documentation experience around the command-line
workflow. The CLI reference becomes easier to scan, bookmark, and share, while
the documentation site moves onto the shared gp-sphinx platform used across the
git-pull ecosystem. The command surface itself is unchanged.

### Dependencies

Minimum `cihai~=0.37.0` (was `~=0.36.1`), bringing `unihan-etl` 0.42.0.

### What's new

#### Linkable CLI reference arguments (#339)

The {ref}`cli` reference now gives every command option and positional argument
its own permalink. That makes it possible to link directly to arguments on
{ref}`cihai-info`, {ref}`cihai-reverse`, and {ref}`cli-completions` instead of
sending readers to the top of a long command page.

Argument metadata now renders as structured key/value rows for default values,
types, choices, and required markers. Required arguments get a compact amber tag,
metadata styling works in both light and dark modes, and metavars with
underscores are highlighted as one token.

#### Documentation landing pages for CLI workflows (#344)

The homepage now leads with the actual `cihai` workflow: installation, `cihai
info`, `cihai reverse`, and the note that the Unihan database is downloaded on
first use. The CLI section uses cards for `info`, `reverse`, and completions,
while project pages collect contributing, code style, and release notes away
from the first-run path.

### Documentation

#### Faster, steadier docs navigation (#342)

The site gained self-hosted IBM Plex fonts, fallback font metrics, explicit
image dimensions, badge placeholders, and SPA-style internal navigation. Those
changes reduce font flash, layout shift, repeated asset downloads, and abrupt
page swaps while preserving regular static HTML output for search engines and
direct links.

#### Copy-pasteable command examples (#343)

Shell examples across the docs and changelog now use `console` blocks with a
prompt marker and one logical command per block. Long commands use continuation
lines so examples are readable without making copy/paste awkward.

#### Shared gp-sphinx documentation platform (#345, #346, #347, #348)

cihai-cli now consumes the published [gp-sphinx](https://gp-sphinx.git-pull.com)
documentation stack instead of carrying repo-local Sphinx extensions, templates,
stylesheets, and JavaScript. The migration keeps the CLI reference features but
moves maintenance to shared packages, including `sphinx-autodoc-argparse` for
argparse pages and `sphinx-autodoc-api-style` for card-style internal API docs.

The docs stack was then bumped through gp-sphinx 0.0.1a8 and 0.0.1a16. Those
updates bring the renamed autodoc packages, the argparse domain, namespaced
CSS, the `gp-furo-theme` Tailwind v4 Furo respin, and `sphinx-vite-builder` so
theme assets are built and packaged by the shared docs platform.

## cihai-cli 0.32.0 (2026-01-24)

cihai-cli 0.32.0 is the CLI documentation overhaul release. It adds color-aware
help examples to the actual command line, replaces the older Sphinx argparse
extension with a richer in-tree documentation engine, and marks the package as
typed for downstream tools.

### What's new

#### Colored CLI help output (#337)

`cihai --help`, `cihai info --help`, and `cihai reverse --help` now include
syntax-highlighted examples. Color output respects `NO_COLOR` and `FORCE_COLOR`,
so terminals, CI logs, and documentation builds can each select the right
rendering mode.

#### CLI reference engine for argparse output (#337)

The docs replaced `sphinx-argparse` with `sphinx_argparse_neo`, a maintained
argparse documentation path ported into this project. It provides custom
Pygments lexers for usage/help output, transforms epilog examples into normal
documentation sections, exposes argparse roles, and strips ANSI escape codes
when colored help is rendered into Sphinx.

### Development

#### Typed package marker (#337)

cihai-cli now ships `py.typed` for [PEP 561](https://peps.python.org/pep-0561/)
type checker discovery. The release also added the docutils and Pygments type
stubs needed to keep the documentation extensions under strict mypy.

## cihai-cli 0.31.1 (2026-01-24)

cihai-cli 0.31.1 keeps the CLI aligned with the trusted-publishing release of
the core `cihai` library. It also moves local developer commands from Make to
Just and updates documentation deployment credentials to the newer OIDC flow.

### Breaking changes

Minimum `cihai~=0.36.1` (was `~=0.36.0`). The bump picks up cihai's PyPI Trusted
Publisher release and the corresponding trusted `unihan-etl` dependency chain.
(#338)

### Documentation

Docs deployment moved to AWS OIDC authentication and the AWS CLI, removing the
older long-lived credential path from the publishing workflow.

### Development

#### Makefile -> Justfile (#333)

Development tasks moved from `Makefile` to `justfile`. Project documentation now
uses `just` commands for test, lint, type-check, and docs workflows.

cihai-cli migrated package publishing to PyPI Trusted Publisher. (#332)

## cihai-cli 0.31.0 (2025-11-01)

cihai-cli 0.31.0 is the Python 3.10 baseline release. It follows the core
`cihai` library to 0.36.0, keeps the test matrix current with Python 3.14, and
adopts deferred annotations consistently across the package.

### Breaking changes

Minimum Python is now 3.10; Python 3.9 is no longer supported. Python 3.9
reached end of life on October 31, 2025. See the
[Python release timeline](https://devguide.python.org/versions/) and
[PEP 596](https://peps.python.org/pep-0596/) for the upstream schedule. (#330)

Minimum `cihai~=0.36.0` (was `~=0.35.0`).

### Development

Python 3.14 was added to the test matrix. (#329)

The codebase now uses `from __future__ import annotations` and enables Ruff's
PEP-compliant annotation checks for `UP006` and `UP007`. That defers annotation
resolution at runtime while moving style enforcement into the normal lint gate.
(#324)

## cihai-cli 0.30.0 (2024-12-21)

cihai-cli 0.30.0 is a maintenance release for the Python 3.9 floor. It drops
Python 3.8, follows `cihai` to its Python 3.9-compatible release line, and
applies the current Ruff autofix set across the project.

### Breaking changes

Minimum Python is now 3.9; Python 3.8 is no longer supported. Python 3.8 reached
end of life on October 7, 2024. See [PEP 569](https://peps.python.org/pep-0569/)
for the upstream release schedule. (#323)

Minimum `cihai~=0.35.0` (was `~=0.34.0`). That also brings in
`unihan-etl>=0.37.0`, which requires Python 3.9. (#323)

### Development

Ruff 0.8.4 was applied with all selected automated fixes, including preview and
unsafe fixes, then formatted the tree. (#323)

```console
$ ruff check --select ALL . --fix --unsafe-fixes --preview --show-fixes; ruff format .
```

## cihai-cli 0.29.0 (2024-11-26)

cihai-cli 0.29.0 moves project management from Poetry to uv and packaging from
Poetry's build backend to Hatchling. The release is maintenance-only for users,
but it changes the contributor and release toolchain substantially.

### Breaking changes

#### Project management moved from Poetry to uv (#321)

[uv](https://github.com/astral-sh/uv) is now the project and dependency manager.
Locking, local installs, and contributor setup use uv instead of Poetry.

#### Build backend moved to Hatchling (#321)

The package build system moved from [poetry](https://github.com/python-poetry/poetry)
to [hatchling](https://hatch.pypa.io/latest/). See the Python Packaging User
Guide's [build backend overview](https://packaging.python.org/en/latest/tutorials/packaging-projects/#choosing-a-build-backend)
for the packaging model.

### Development

Ruff 0.4.2 code-quality fixes were applied, including f-string modernization in
places where the linter could safely improve readability. (#312)

## cihai-cli 0.28.0 (2024-04-06)

cihai-cli 0.28.0 is a maintenance release focused on documentation hygiene and
the latest cihai 0.33.x dependency line.

### Documentation

Plain-text links in the docs are now automatically linkified.

### Development

Minimum `cihai~=0.33.0` (was `~=0.32.0`). The bump follows cihai's Ruff linting
updates.

## cihai-cli 0.27.0 (2024-04-01)

cihai-cli 0.27.0 is a maintenance release for the cihai 0.32.x dependency line
and the Ruff 0.3 toolchain. It keeps the CLI aligned with Unihan ETL fixes while
modernizing lint command usage.

### Development

Minimum `cihai~=0.32.0` (was `~=0.31.0`), including `unihan-etl>=0.34.0`.

Ruff was bumped from 0.2.2 to 0.3.0 and CI now runs `ruff check .` instead of
the older `ruff .` command form. (#309)

Ruff 0.3.4 automated fixes were applied across active branches before the
release. (#310)

```console
$ ruff check --select ALL . --fix --unsafe-fixes --preview --show-fixes; ruff format .
```

## cihai-cli 0.26.0 (2024-02-09)

cihai-cli 0.26.0 brings the CLI onto the Unihan 15.1 data line through cihai
0.31.0 and unihan-etl 0.33.1. Users get the current Unicode data compatibility
without changing the `cihai info` or `cihai reverse` command model.

### What's new

#### Unihan 15.1 compatibility (#308)

The cihai dependency now supports Unihan 15.1.0, released September 1, 2023 in
[TR38 revision 35](https://www.unicode.org/reports/tr38/tr38-35.html#History).
The underlying unihan-etl bump also includes the earlier `kRSUnicode` double
apostrophe fix.

### Development

Ruff linting was strengthened with `flake8-commas`, `flake8-builtins`, and
`flake8-errmsg` rule families. (#307)

## cihai-cli 0.25.0 (2023-12-09)

cihai-cli 0.25.0 is a maintenance release for docstring coverage, CI cleanup,
and the cihai 0.30.x dependency line.

### Documentation

Functions, methods, classes, and packages gained docstrings. (#304)

### Development

Minimum `cihai~=0.30.0` (was `~=0.29.0`). The cihai release includes
pydocstyle-oriented docstrings and fixes for unused character utility functions.

The pytest configuration moved into `pyproject.toml`, and pydocstyle checks were
added to Ruff. (#301, #304)

CodeQL moved from an advanced configuration file to GitHub's default setup.
(#304)

## cihai-cli 0.24.0 (2023-11-19)

cihai-cli 0.24.0 is a maintenance release for Python 3.12 packaging metadata,
Poetry dependency-group cleanup, and the switch from Black to Ruff formatting.

### Development

Pytest configuration now lives in `pyproject.toml`, Python 3.12 appears in the
package classifiers, and Poetry development dependencies use dependency groups
instead of extras. (#301)

Formatting moved from Black to [`ruff format`](https://docs.astral.sh/ruff/formatter/),
keeping Black-compatible style while removing a separate formatter dependency.
(#302)

Minimum `unihan-etl>=0.29.0` through the cihai dependency line.

Poetry was bumped from 1.6.1 to 1.7.0, and the `eradicate` Ruff rule family was
removed after too many false positives.

GitHub Actions dependencies were updated to clear workflow warnings, including
`dorny/paths-filter` 2.11.1.

## cihai-cli 0.23.0 (2023-07-22)

cihai-cli 0.23.0 is a maintenance release that follows cihai 0.28.0 for pytest
plugin updates.

### Development

Minimum `cihai~=0.28.0` (was `~=0.27.0`).

## cihai-cli 0.22.0 (2023-07-18)

cihai-cli 0.22.0 is a maintenance release that picks up cihai 0.27.0 and the
unihan-etl pytest fixes beneath it.

### Development

Minimum `cihai~=0.27.0` (was `~=0.26.0`), including unihan-etl 0.27.0 pytest
fixes. (#300)

## cihai-cli 0.21.2 (2023-07-18)

cihai-cli 0.21.2 is a maintenance release for Ruff-driven code-quality fixes.

### Development

Ruff fixes were applied across the project. (#299)

## cihai-cli 0.21.1 (2023-07-02)

cihai-cli 0.21.1 restores the main user workflows after regressions in the
previous release.

### Fixes

`cihai info` and `cihai reverse` were fixed. (#297, #298)

## cihai-cli 0.21.0 (2023-07-01)

cihai-cli 0.21.0 is a maintenance release for stricter Ruff enforcement and the
cihai 0.26.x dependency line.

### Development

Ruff strictness increased and the resulting code improvements were applied.
(#295)

Minimum `cihai~=0.26.0` (was `~=0.25.0`), including matching lint updates in
unihan-etl 0.25.0.

## cihai-cli 0.20.0 (2023-06-25)

cihai-cli 0.20.0 is a dependency maintenance release. It follows cihai through
0.25.0 and picks up the zhon 2.0 regular-expression warning fix through
unihan-etl.

### Development

Minimum `cihai~=0.25.0` (was `~=0.23.0`). The dependency chain includes
unihan-etl 0.24.0 and zhon 2.0.0, which fixes pytest regular-expression
warnings. (#298)

## cihai-cli 0.19.0 (2023-06-24)

cihai-cli 0.19.0 follows cihai and unihan-etl's dataclass-based configuration
work.

### Development

Minimum `cihai~=0.22.1` (was `~=0.21.0`). The dependency chain includes
unihan-etl 0.22.2 with `dataclasses.dataclass`-based configuration.

## cihai-cli 0.18.0 (2023-06-19)

cihai-cli 0.18.0 follows cihai's pathlib and typing cleanup.

### Development

Minimum `cihai~=0.22.1`. This dependency line relies on `pathlib`-based paths
and improved type annotations.

## cihai-cli 0.17.0 (2023-06-04)

cihai-cli 0.17.0 is the Python 3.8 baseline release. It drops Python 3.7,
tightens typing, and follows cihai into its SQLAlchemy 2.0 dependency line.

### Breaking changes

Python 3.7 support was dropped. Python 3.7 reached end of life on June 27, 2023,
and Python 3.8 provides `typing.TypedDict` and `typing.Protocol` without
`typing_extensions`. (#290)

### Development

Strict mypy compliance was added. (#277)

Tests moved from pytest's `tmpdir` / `py.path.local` fixture to `tmp_path` /
`pathlib.Path`. (#292)

Unnecessary `typing_extensions.TypedDict` imports were removed where the Python
floor made stdlib `typing.TypedDict` available. `typing_extensions` remains
needed for `NotRequired` until the project can require Python 3.11. (#292)

Minimum `cihai~=0.21.0` includes strict typing work and the SQLAlchemy 2.0
migration from the core library.

## cihai-cli 0.16.0 (2023-05-29)

cihai-cli 0.16.0 is the final Python 3.7-compatible release and the first
release to consolidate linting and formatting on Ruff.

### Breaking changes

0.16.0 is the final release that supports Python 3.7.

### Development

Formatting, import sorting, and linting moved from isort, flake8, and Black-era
tooling to [Ruff](https://ruff.rs).

Poetry was bumped from 1.4.0 to 1.5.0.

Minimum `cihai~=0.19.0` and unihan-etl 0.19.1 carry the same Ruff migration in
the dependency stack.

## cihai-cli 0.15.2 (2022-10-02)

cihai-cli 0.15.2 is a maintenance release for the cihai 0.18.x line and docs
navigation.

### Documentation

The migration page was added, and the completions page link was restored.

### Development

Minimum `cihai~=0.18.3` (was `~=0.18.1`), including unihan-etl 0.18.2 typing
updates for `merge_dict`.

## cihai-cli 0.15.1 (2022-10-02)

cihai-cli 0.15.1 fixes CLI help text descriptions.

### Fixes

Command help descriptions now render correctly.

## cihai-cli 0.15.0 (2022-10-02)

cihai-cli 0.15.0 replaces Click with stdlib argparse. The command names remain
focused on character lookup and reverse definition search, but the CLI no
longer needs Click at runtime.

### Breaking changes

The command-line implementation moved from `click` to `argparse`. (#286)

### Development

The Click dependency was removed. (#286)

## cihai-cli 0.14.0 (2022-10-01)

cihai-cli 0.14.0 follows cihai 0.18.1 and removes the kaptan dependency from
the installed stack.

### Dependencies

Minimum `cihai>=0.18.1`; kaptan is no longer installed through the cihai
dependency chain.

## cihai-cli 0.13.1 (2022-10-01)

cihai-cli 0.13.1 speeds up CI and updates Poetry for the 1.2 dependency
constraint model.

### Development

Release publishing moved into a separate job so normal CI does not pull the PyPI
upload image. CodeQL was also cleaned up. (#285)

Poetry moved from 1.1.x to 1.2.x, including the corrected Click constraint for
Poetry 1.2.

## cihai-cli 0.13.0 (2022-09-11)

cihai-cli 0.13.0 is a project-structure and documentation-testing release. It
moves to a `src/` layout, broadens lint coverage, and starts testing docs
examples as part of the normal validation path.

### Development

The package moved to a `src/` layout. (#284)

`flake8-bugbear` and `flake8-comprehensions` were added to the lint stack.
(#281, #282)

### Documentation

The changelog now renders through `linkify_issues`, table-of-contents rendering
was fixed for Sphinx autodoc pages, and docs doctests run through
`pytest_doctest_docutils`. (#283)

## cihai-cli 0.12.0 (2022-08-21)

cihai-cli 0.12.0 follows cihai 0.16.0 and the strict typing work in unihan-etl
0.17.x.

### Development

Minimum `cihai~=0.16.0`.

## cihai-cli 0.11.0 (2022-08-20)

cihai-cli 0.11.0 restores the separate `cihai-cli` distribution as the way to
install the command-line frontend. This avoids making cihai's library package
carry the CLI extra as the primary install path.

### Breaking changes

Install the CLI through `cihai-cli` again.

Before, cihai 0.9 through 0.14 and cihai-cli 0.5 through 0.10 used the cihai
extra:

```console
$ pip install cihai[cli]
```

After cihai 0.15 and cihai-cli 0.11, install the CLI package directly:

```console
$ pip install cihai-cli
```

Modern uv workflows can add the CLI to a project:

```console
$ uv add cihai-cli
```

Install it as a user-wide tool:

```console
$ uv tool install cihai-cli
```

Or run it on demand:

```console
$ uvx --from cihai-cli cihai --version
```

See [cihai#326](https://github.com/cihai/cihai/pull/326) and
[cihai-cli#279](https://github.com/cihai/cihai-cli/pull/279).

## cihai-cli 0.10.x (2022-08-20)

cihai-cli 0.10.x removes Python 2 compatibility code left over after the
earlier support drop.

### Breaking changes

Python 2 compatibility modules and imports were removed. Python 2.x had already
been officially dropped in 0.7.0. (#278)

## cihai-cli 0.9.0 (2022-08-16)

cihai-cli 0.9.0 updates Python compatibility, adds the first doctest path, and
switches the documentation theme to Furo.

### Breaking changes

Python 3.6 support was removed. (#269)

### What's new

Python 3.10 support was added. (#269)

### Documentation

Doctest support was added, and the docs moved to the Furo theme. (#276)

### Development

Poetry was updated to the 1.1 line, CI dependency caching was improved with
`actions/setup-python`, and initial mypy validation was added. (#255, #269,
#276)

Tests moved from `tmpdir` to `tmp_path`.

## cihai-cli 0.8.1 (2021-06-16)

cihai-cli 0.8.1 updates the cihai dependency to 0.12.

### Development

Minimum `cihai~=0.12.0`.

## cihai-cli 0.8.0 (2021-06-16)

cihai-cli 0.8.0 converts project documentation to Markdown.

### Documentation

The documentation source moved to Markdown. (#252)

## cihai-cli 0.7.2 (2021-06-15)

cihai-cli 0.7.2 updates the cihai dependency to fix a SQLAlchemy issue.

### Fixes

Minimum `cihai>=0.11.1` for the SQLAlchemy fix.

## cihai-cli 0.7.1 (2021-06-15)

cihai-cli 0.7.1 fixes README packaging.

### Fixes

The README is included correctly in package metadata.

## cihai-cli 0.7.0 (2021-06-15)

cihai-cli 0.7.0 removes legacy Python support and updates packaging metadata
for the Python 3-only line.

### Breaking changes

Python 2.7 and Python 3.5 support were dropped, along with deprecated
`__future__` imports and modesets. (#251)

### Development

Black was updated to 21.6b0, and trove classifiers were updated for Python 3.9.

## cihai-cli 0.6.0 (2020-08-09)

cihai-cli 0.6.0 is an infrastructure release for packaging, documentation
hosting, and GitHub Actions.

### Documentation

The docs became self-hosted and gained site metadata and icons. (#248)

### Development

Packaging and publishing moved to Poetry, Travis CI moved to GitHub Actions,
and Makefiles were overhauled. (#248, #249)

## cihai-cli 0.5.1 (2020-07-03)

cihai-cli 0.5.1 continues the packaging migration and fixes a Python 2 help
display bug.

### Fixes

Help output works again on Python 2.x.

### Development

Project dependency management moved from Pipfile to Poetry. (#247)

## cihai-cli 0.5.0 (2019-08-18)

cihai-cli 0.5.0 updates package metadata and relaxes dependency constraints
around the then-current `cihai[cli]` install model.

### Development

`project_urls` were added to `setup.py`, the README was fixed to use plain
reStructuredText, and package requirements were loosened.

The documented install path at the time was:

```console
$ pip --user install cihai[cli]
```

Pytest and other support packages were updated.

## cihai-cli 0.5.0a (2018-09-08)

cihai-cli 0.5.0a improves version reporting.

### What's new

`cihai -V` and `cihai -version` now show the cihai backend version. (#91)

## cihai-cli 0.4.1 (2018-07-21)

cihai-cli 0.4.1 updates Sphinx and cihai to fix dependency issues around kaptan
and PyYAML.

### Fixes

Sphinx moved from 1.7.5 to 1.7.6, and cihai moved from 0.8.0 to 0.8.1.

## cihai-cli 0.4.0 (2018-06-24)

cihai-cli 0.4.0 improves the default character detail output and modernizes the
project's development stack for the Pipenv era.

### What's new

The `info` command now includes Vietnamese phonetic data in the default output.

### Documentation

Documentation moved to NumPy-style docstrings, and the license was updated from
New BSD to MIT. Future commits and contributions are licensed to the cihai
software foundation, including commits by Tony Narlock.

### Development

Project tooling moved toward Pipenv, with tmuxp config updates, an added
`Pipfile`, new isort/flake8 tests, a `make sync_pipfile` task, and package
updates across Sphinx, pytest, releases, vulture, alagitpull, and lint tooling.

## cihai-cli 0.3.2 (2017-05-26)

cihai-cli 0.3.2 bumps the cihai dependency.

### Development

Minimum `cihai~=0.7.4`.

## cihai-cli 0.3.1 (2017-05-20)

cihai-cli 0.3.1 bumps the cihai dependency.

### Development

Minimum `cihai~=0.7.2`.

## cihai-cli 0.3.0 (2017-05-20)

cihai-cli 0.3.0 shapes the original CLI into the command vocabulary that still
matters today: concise character details by default and reverse lookup by term.

### Breaking changes

The `lookup` command was renamed to `reverse`.

### What's new

The default output now shows human-friendly fields. Use `-a` or `--all` to show
all fields.

### Fixes

Output no longer includes extra newlines, printing uses `click.echo`, and
Unicode handling was fixed for Python 2.7 tests and CLI output.

## cihai-cli 0.2.1 (2017-05-20)

cihai-cli 0.2.1 fixes early package and CLI variable issues.

### Fixes

CLI variables were adjusted and a package dependency issue was fixed.

## cihai-cli 0.2.0 (2017-05-20)

cihai-cli 0.2.0 is the initial project release.

### What's new

Initial command-line frontend for cihai.

<!---
vim: set filetype=markdown:
-->
