v2.9.1
Automattic/harperv2.9.1Sep 1, 2026by github-actions[bot]
AI Summary
This release focuses on enhancing grammar and spelling accuracy with numerous linter improvements and fixes for common usage errors. It also introduces significant desktop application updates, including full Windows support and the ability to apply suggestions directly.
Key Highlights
- Added Windows support to the desktop app with text reading capabilities via the Automation API.
- Expanded grammar rules to fix common mistakes like 'look-alike', 'combinate', and 'underneath of'.
- Improved accuracy by fixing false positives, such as not flagging Dickens as a swear word.
- Added the ability to apply suggestions directly within the desktop application.
- Fixed Firefox extension POST capabilities and added placeholder text to the web editor.
New Features
- WindowsBroker for reading text from apps
- Apply suggestions to text
- Query installed applications
- Disable highlights while windows move
- Enhanced ToTo linter
- Placeholder text for web editor
- Refactored VeryLess to Rust linter
Full Release Notes
## What's Changed * chore: more irregular plurals by @hippietrail in https://github.com/Automattic/harper/pull/4040 * feat: look-a-like→lookalike/look-alike by @hippietrail in https://github.com/Automattic/harper/pull/4074 * chore: add "first founded" to `RedundantFirsts` by @hippietrail in https://github.com/Automattic/harper/pull/4072 * feat: curious on/of→curious about by @hippietrail in https://github.com/Automattic/harper/pull/4080 * feat: finish touches→finishing touches by @hippietrail in https://github.com/Automattic/harper/pull/4081 * fix(core): do not flag Dickens as a swear by @mauropereiira in https://github.com/Automattic/harper/pull/4031 * feat: surrealness→surreality by @hippietrail in https://github.com/Automattic/harper/pull/4101 * feat: enhance the `ToTo` linter by @hippietrail in https://github.com/Automattic/harper/pull/4100 * Update build tooling (fastlane to 2.238.0, Ruby 3.4.9, Xcode 26.6) by @mokagio in https://github.com/Automattic/harper/pull/4099 * fix(desktop): repair application picker by @mauropereiira in https://github.com/Automattic/harper/pull/4024 * fix(web): fix problems with the footer by @elijah-potter in https://github.com/Automattic/harper/pull/4046 * build(deps): bump uuid from 1.24.0 to 1.24.1 by @dependabot[bot] in https://github.com/Automattic/harper/pull/4123 * feat: 'npm' requires 'an', not 'a' by @hippietrail in https://github.com/Automattic/harper/pull/4146 * feat: flag confusing "tote" and "tout" by @hippietrail in https://github.com/Automattic/harper/pull/4147 * feat: dissemble→disassemble by @hippietrail in https://github.com/Automattic/harper/pull/3923 * feat: better off served→better off/better served by @hippietrail in https://github.com/Automattic/harper/pull/3946 * chore: dictionary curation by @hippietrail in https://github.com/Automattic/harper/pull/4073 * feat: get/go pass→get/go past by @hippietrail in https://github.com/Automattic/harper/pull/4121 * feat: a whole another/nother/'nother → a whole other by @hippietrail in https://github.com/Automattic/harper/pull/4145 * feat: all well in good→all well and good by @hippietrail in https://github.com/Automattic/harper/pull/4102 * feat: off-limit→off-limits by @hippietrail in https://github.com/Automattic/harper/pull/4083 * feat: underneath of→underneath/under by @hippietrail in https://github.com/Automattic/harper/pull/4148 * feat(editor): add placeholder text to the web editor by @elijah-potter in https://github.com/Automattic/harper/pull/4097 * build(deps): bump cached from 0.59.0 to 2.0.2 by @dependabot[bot] in https://github.com/Automattic/harper/pull/4125 * fix(core): stop `LetsConfusion` flagging quantifiers after `let's` by @mauropereiira in https://github.com/Automattic/harper/pull/4082 * fix(core): don't flag "no thanks to" as a missing refusal comma by @mauropereiira in https://github.com/Automattic/harper/pull/4088 * build(deps): bump the actions-minor-patch group with 2 updates by @dependabot[bot] in https://github.com/Automattic/harper/pull/4092 * feat: become missing→go missing by @hippietrail in https://github.com/Automattic/harper/pull/4021 * feat: backhand compliment→backhanded compliment by @hippietrail in https://github.com/Automattic/harper/pull/4169 * feat: three simple linters by @hippietrail in https://github.com/Automattic/harper/pull/4158 * feat: go into sleep→go to sleep by @hippietrail in https://github.com/Automattic/harper/pull/4201 * feat: in/on the grand scale of things→grand scheme by @hippietrail in https://github.com/Automattic/harper/pull/4179 * feat: combinate→combine by @hippietrail in https://github.com/Automattic/harper/pull/4178 * feat: strike of genius/luck → stroke of genius/luck by @hippietrail in https://github.com/Automattic/harper/pull/4217 * feat: dig under the hood → look under the hood by @hippietrail in https://github.com/Automattic/harper/pull/3878 * feat: in the same vain/vane/veins → in the same vein by @hippietrail in https://github.com/Automattic/harper/pull/4216 * feat: claim for fame → claim to fame by @hippietrail in https://github.com/Automattic/harper/pull/4221 * build(deps): bump ordered-float from 5.3.0 to 5.5.0 by @dependabot[bot] in https://github.com/Automattic/harper/pull/4225 * build(deps): bump pollster from 0.4.0 to 1.0.1 by @dependabot[bot] in https://github.com/Automattic/harper/pull/4227 * feat: seize to do → cease to do by @hippietrail in https://github.com/Automattic/harper/pull/4235 * fix(web): allow the Firefox extension to POST by @elijah-potter in https://github.com/Automattic/harper/pull/4231 * fix(web): weird spacing on the landing page by @elijah-potter in https://github.com/Automattic/harper/pull/4237 * refactor: upgrade `VeryLess` to Rust linter to handle "too less" etc. by @hippietrail in https://github.com/Automattic/harper/pull/4229 * feat: correct wrong variants of welcome/greet with open arms by @hippietrail in https://github.com/Automattic/harper/pull/4241 * chore: dictionary curation by @hippietrail in https://github.com/Automattic/harper/pull/4230 * feat(desktop): add a `WindowsBroker` and use the Automation API to read text from apps by @elijah-potter in https://github.com/Automattic/harper/pull/4174 * feat(desktop): be able to apply suggestions by @elijah-potter in https://github.com/Automattic/harper/pull/4175 * refactor(desktop): remove default implementations of `OsBroker` by @elijah-potter in https://github.com/Automattic/harper/pull/4176 * feat(desktop): add methods to query installed applications by @elijah-potter in https://github.com/Automattic/harper/pull/4214 * feat(desktop): ignore disabled integrations on Windows by @elijah-potter in https://github.com/Automattic/harper/pull/4239 * feat(desktop): add padding to highlight hit boxes by @elijah-potter in https://github.com/Automattic/harper/pull/4240 * fix(desktop): suggestions will close before user interaction by @elijah-potter in https://github.com/Automattic/harper/pull/4243 * feat(desktop): disable highlights while windows move by @elijah-potter in https://github.com/Automattic/harper/pull/4245 * build(desktop): prepare workflow for building Windows by @elijah-potter in https://github.com/Automattic/harper/pull/4246 **Full Changelog**: https://github.com/Automattic/harper/compare/v2.8.0...v2.9.1