What's New
- CLI updates: Proselint now has subcommands. These are
proselint checkfor the original behaviour,proselint versionto print the version and exit, andproselint dump-configto view the loaded or default configuration. - Stable JSON output: We now have stable output for connecting Proselint with other programs. Use
proselint check --output-format jsonto access this new functionality, with a schema shown in the documentation. - Phantom power and ludicrous speed: A 5x performance improvement against the demo file has been achieved over the last release.
- Configuration changes: You can now specify checks down to the individual level in your configuration, while still being able to control them at the module level. Accompanying this new granularity is the ability to nest dictionaries to keep your configuration concise.
- Housekeeping: The cache system of yore is gone, and the many check streamlining suggestions from #1373 were implemented.
Thank you to all of our new and returning contributors for this release. An unabridged summary is also available below.
Change Log
0.16.0 - 2025-11-14
⛰️ Features
- (registry) Add strict padding for checks (#1428) - (f1894bc)
- Override keys and dot-prop (#1440) - (ddebe9f)
- Add flag to prevent filtering quotes in lintfile (#1404) - (109f58f)
- Implement check registry (#1396) - (3bc0d13)
🐛 Bug Fixes
- (checks) Ignore least and most in uncomparables after at (#1433) - (b94542c)
- (checks) Allow very well in weasel_words (#1426) - (616e855)
- (checks) Resolve meantime/meanwhile conflict in misc.preferred_forms (#1425) - (18ecce6)
- (registry) [breaking] Remove results_limit (#1421) - (d77cd1b)
- Move chocolatey to spelling.consistency (#1432) - (7a2d503)
- Simplify but check and properly count lines (#1423) - (68be196)
- Rectify capitalisation in preferred forms (#1413) - (81d2ea1)
- Check venery-waxed return types (#1414) - (b481488)
- Update Sublime plugin for SublimeLinter4 (#1107) - (8df0966)
🚜 Refactor
- (cli) Switch click -> argparse and add logging (#1400) - (01b507e)
- (config) Remove unused copy import (#1402) - (cd19388)
- (tools) Upgrade internals (#1399) - (d9db2c5)
- Stabilise wire logging (#1444) - (02e85a8)
- [breaking] Upgrade to python 3.10 (#1435) - (1b986fe)
- [breaking] Remove unused corpus scoring (#1403) - (85fde74)
- Implement iterators for check results (#1398) - (fa73970)
- Modernise config (#1394) - (0e1feba)
- Tidy checks (#1383) - (053295c)
📚 Documentation
⚡ Performance
- (checks) [breaking] Use dual engine system (#1436) - (e12a943)
- (cli) Import version lazily (#1438) - (7bfb8f1)
- (registry) Early exit matches_partial (#1441) - (9fa6339)
- (tools) Use bisect for boundary checks (#1407) - (c80ef08)
⚙️ Miscellaneous Tasks
- (gh) Remove pr frontmatter - (da58e87)
- (publish) Bypass protections (#1447) - (200a817)
- (publish) Fix release configurations (#1446) - (79885f8)
- Prepare release v0.16.0 - (a83a616)
- Prepare release v0.15.0 - (19827df)
- Use nix for workflows (#1416) - (9c24e8c)
- Update issue templates (#1420) - (35e7686)
- Update workflows (#1419) - (7280204)
- Ignore .envrc and .direnv (#1415) - (6bf7ab5)
- Remove danger (#1384) - (def7995)
- Update ci and flake (#1386) - (35e48a0)
- Update tooling (#1381) - (9132ee4)
- Remove duplicate items from lists (#1369) - (f01742d)
- Pin runner image versions (#1368) - (03a7360)
Build
New Contributors ❤️
- @drainpixie made their first contribution in #1440
- @Yoshanuikabundi made their first contribution in #1107
- @ferdnyc made their first contribution in #1370