All notable changes to stackvox are documented in this file.
The format follows Keep a Changelog and this project adheres to Semantic Versioning.
From v0.2.1 onwards, entries in this file are generated by release-please from conventional commits; earlier entries (v0.2.0 and below) were written by hand.
0.5.0 (2026-04-30)
0.4.0 (2026-04-30)
0.3.1 (2026-04-30)
0.3.0 (2026-04-29)
- cli: stdin support, download progress, bash completion, thread-safe defaults (#11) (2ae8f85)
- daemon: refresh audio only when default output device changes (#13) (dd68606)
0.2.1 (2026-04-22)
- add CODEOWNERS (#6) (6321894)
- deps: bump the actions group across 1 directory with 3 updates (1b65b4c)
- deps: bump the actions group across 1 directory with 3 updates (82131fd)
- prep repo for going public (#8) (861d1fa)
0.2.0 - 2026-04-22
First open-source release. Adds packaging/licensing hygiene, a full test + CI + release pipeline, and a quality-of-life fix for audio device switches.
- Daemon automatically refreshes PortAudio before each utterance, so switching the system output device (e.g. plugging in Bluetooth headphones) no longer requires a daemon restart.
python -m stackvoxentry point.stackvox.pathsmodule exposingcache_dir(),socket_path(), andpid_path()as public API.LICENSE(Apache 2.0),NOTICEwith third-party attributions,CONTRIBUTING.md,SECURITY.md, andCODE_OF_CONDUCT.md(Contributor Covenant 2.1).- GitHub issue templates (bug report, feature request) and a pull-request template.
- Test suite under
tests/covering path resolution, CLI argument routing, and the daemon socket protocol. stackvox/py.typedmarker so downstream type checkers honour the inline type hints.- GitHub Actions CI running ruff lint/format, mypy, and pytest across Python 3.10 – 3.13 on Ubuntu, plus commit-message and PR-title validation.
- Test coverage reporting via
pytest-cov, uploaded to Codecov. - README badges for CI, coverage, Python version, and license.
devoptional dependency group (pytest,pytest-mock,pytest-cov,ruff,pre-commit,commitizen,mypy).- Ruff, mypy, pytest, and coverage configuration in
pyproject.toml. - Project metadata: SPDX license expression, authors, keywords, project URLs, classifiers.
.pre-commit-config.yamlwiring ruff hooks plus a commitizen commit-msg hook for local conventional-commit enforcement..github/dependabot.yml— weekly pip and GitHub Actions updates.- Release automation via release-please: merging conventional-commit PRs rolls a release PR that, when merged, tags the commit and publishes to PyPI via Trusted Publishing (OIDC — no API tokens stored in the repo).
- PR-title validation workflow (
amannn/action-semantic-pull-request) for squash-merge flows where the PR title becomes the commit on main.
- Library modules (
engine.py,daemon.py) emit diagnostics vialogginginstead ofprint(). The CLI configuresbasicConfigat entry so output shape is unchanged for users. - Example scripts moved from the repo root to
examples/. stackvox.__version__is now read from installed package metadata, sopyproject.tomlis the single source of truth for the version.- Magic numbers in
daemon.py(worker poll interval, client/ping timeouts, recv buffer size) promoted to named module constants.
- Promoted
stackvox.engine._cache_dir(private) tostackvox.paths.cache_dir()(public);daemon.pyno longer reaches across module boundaries into a private helper. - Two small type-safety fixes (typed the signal-handler frame parameter; narrowed
_read_text's argparse Namespace access to avoid anAnyreturn) so mypy runs cleanly.
0.1.0 - 2026-04-17
Initial commit. Offline TTS using Kokoro-82M via kokoro-onnx, with a Python library, CLI, and a long-running daemon driven over a unix socket for low-latency shell access.