v2.2.0
Automattic/harperv2.2.0May 21, 2026by github-actions[bot]
AI Summary
The release that launched the Harper Desktop application, introduced new linters, separated the web editor, and added the 'Avoid Contractions' rule.
Key Highlights
- Launch of the Harper Desktop application with setup flow and auto-update.
- Introduced new linters 'ThereOwn' and 'CantWay'.
- Separated the web editor into its own package.
- Added 'Avoid Contractions' rule and 'LLM' linter.
New Features
- Harper Desktop application creation and setup flow.
- New linter for 'There own' -> 'Their own'.
- Separated web editor into its own package.
- Added 'Avoid Contractions' rule and 'LLM' linter.
- Redesigned harper-editor UI.
Full Release Notes
## What's Changed * feat: at lest→at least by @hippietrail in https://github.com/Automattic/harper/pull/3243 * chore: add "day of age" to `DayAndAge` rule by @hippietrail in https://github.com/Automattic/harper/pull/3272 * feat: less confident `SplitWords` `message` when either word is only 1 char by @hippietrail in https://github.com/Automattic/harper/pull/3265 * fix(chrome-plugin): auto-close report page on tab switch or navigation #3225 by @muhammed-mukthar in https://github.com/Automattic/harper/pull/3227 * docs: link to QOwnNotes and Grammate, two apps using Harper by @hippietrail in https://github.com/Automattic/harper/pull/3261 * feat: monumentously→momentously/monumentally by @hippietrail in https://github.com/Automattic/harper/pull/3264 * feat: separate web editor into own package by @elijah-potter in https://github.com/Automattic/harper/pull/3191 * docs: remove mentions of `Matcher` and `WrongQuotes` linters by @hippietrail in https://github.com/Automattic/harper/pull/3262 * build(deps): bump tree-sitter-scala from 0.25.0 to 0.26.0 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3247 * feat: fond on→found on/fond of by @hippietrail in https://github.com/Automattic/harper/pull/3251 * feat: formidable years→formative years by @hippietrail in https://github.com/Automattic/harper/pull/3249 * chore: dictionary curation by @hippietrail in https://github.com/Automattic/harper/pull/3240 * feat: on hindsight/in hind sight etc.→in hindsight by @hippietrail in https://github.com/Automattic/harper/pull/3305 * feat: expand coord, vuln, notif, algo by @hippietrail in https://github.com/Automattic/harper/pull/3291 * Dictionary Curation 2025-05-01 by @hippietrail in https://github.com/Automattic/harper/pull/3279 * build(deps): bump clap_complete from 4.6.0 to 4.6.3 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3301 * build(deps): bump tokio from 1.51.1 to 1.52.1 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3300 * feat: side tangent→tangent/aside by @hippietrail in https://github.com/Automattic/harper/pull/3298 * refactor: move `dictionary_io` into own crate by @elijah-potter in https://github.com/Automattic/harper/pull/3307 * feat(harper.js): make it easier to ignore all lints by @elijah-potter in https://github.com/Automattic/harper/pull/3315 * fix: a some time→some time by @hippietrail in https://github.com/Automattic/harper/pull/3318 * fix(lint-framework): handle soft breaks in contenteditable text extraction by @draphy in https://github.com/Automattic/harper/pull/3317 * Redesign harper-editor UI by @JasonTheAdams in https://github.com/Automattic/harper/pull/3278 * feat: LLM model→LLM/large language model by @hippietrail in https://github.com/Automattic/harper/pull/3308 * fix: restore `CallThem` linter that got unlinked from the project at some point by @hippietrail in https://github.com/Automattic/harper/pull/3320 * feat: in favour doing→in favour of doing by @hippietrail in https://github.com/Automattic/harper/pull/3293 * feat: "there is" agreement by @hippietrail in https://github.com/Automattic/harper/pull/3303 * fix(chrome-ext): extend test timeout by @elijah-potter in https://github.com/Automattic/harper/pull/3328 * feat: argument to be said→argument to be made by @hippietrail in https://github.com/Automattic/harper/pull/3360 * chore: dictionary curation 2026-05-06 by @hippietrail in https://github.com/Automattic/harper/pull/3312 * build(deps): bump zip from 8.5.1 to 8.6.0 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3341 * build(deps): bump tree-sitter-c from 0.24.1 to 0.24.2 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3342 * feat: add backtick as another wrong-apostrophe mistake by @hippietrail in https://github.com/Automattic/harper/pull/3349 * Let me laugh by @JasonTheAdams in https://github.com/Automattic/harper/pull/3365 * feat(desktop): create Harper Desktop by @elijah-potter in https://github.com/Automattic/harper/pull/3324 * fix(harper-typst): crash by @elijah-potter in https://github.com/Automattic/harper/pull/3366 * feat(desktop): fill out setup flow by @elijah-potter in https://github.com/Automattic/harper/pull/3381 * chore: Tickboxes for AI use and test provenance by @hippietrail in https://github.com/Automattic/harper/pull/3375 * style: clean up some imports by @86xsk in https://github.com/Automattic/harper/pull/3179 * fix(core): delegate to correct underlying method by @elijah-potter in https://github.com/Automattic/harper/pull/3387 * fix(ci): issue with Rust Cache on new macOS runners by @elijah-potter in https://github.com/Automattic/harper/pull/3389 * fix(harper-tex): out-of-bounds error by @elijah-potter in https://github.com/Automattic/harper/pull/3386 * feat(core): allow scope config in Weir rules by @elijah-potter in https://github.com/Automattic/harper/pull/3382 * build(desktop): create release workflow for Harper Desktop by @elijah-potter in https://github.com/Automattic/harper/pull/3388 * feat(core): create `CantWay` rule by @elijah-potter in https://github.com/Automattic/harper/pull/3383 * fix(core): refine BetterOffPhrase contexts by @cfcryptotrader-rgb in https://github.com/Automattic/harper/pull/3376 * feat: long time ago→a long time ago by @hippietrail in https://github.com/Automattic/harper/pull/3395 * feat: add ThereOwn linter for "there own" → "their own" by @kimjune01 in https://github.com/Automattic/harper/pull/3336 * Fix FindFine false positive on 'is find <noun>' by @SAY-5 in https://github.com/Automattic/harper/pull/3363 * Add verb past form only helpers by @impetus82 in https://github.com/Automattic/harper/pull/3379 * feat: just with default recipe now prints a help message by @ninjamar in https://github.com/Automattic/harper/pull/3414 * feat: for free of charge → for free / free of charge by @hippietrail in https://github.com/Automattic/harper/pull/3413 * feat: improve just clean and hard-clean recipes by fixing some bugs by @ninjamar in https://github.com/Automattic/harper/pull/3415 * build(deps): bump tree-sitter-swift from 0.7.1 to 0.7.2 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3411 * build(deps): bump tree-sitter-c-sharp from 0.23.1 to 0.23.5 by @dependabot[bot] in https://github.com/Automattic/harper/pull/3410 * chore: unneeded comments, typos in comments by @hippietrail in https://github.com/Automattic/harper/pull/3409 * fix(core): replace Arc with Lrc in call_them and should_contract by @Dronakurl in https://github.com/Automattic/harper/pull/3407 * feat: to crave for → to crave by @hippietrail in https://github.com/Automattic/harper/pull/3408 * feat(desktop): add debounce option by @elijah-potter in https://github.com/Automattic/harper/pull/3420 * fix(desktop): hide highlights while windows move by @elijah-potter in https://github.com/Automattic/harper/pull/3419 * feat: constitute as→constitute by @hippietrail in https://github.com/Automattic/harper/pull/3398 * fix(desktop): broken buttons on setup page by @elijah-potter in https://github.com/Automattic/harper/pull/3421 * chore: dictionary curation 2026/05/13 by @hippietrail in https://github.com/Automattic/harper/pull/3391 * fix(weir): test runner now tries all 'becomes' alternatives, not just first 3 by @jlaportebot in https://github.com/Automattic/harper/pull/3424 * feat: `AnchorEnd` finally fixed by @hippietrail in https://github.com/Automattic/harper/pull/3406 * feat: nought→zero for US english by @hippietrail in https://github.com/Automattic/harper/pull/3429 * feat(core): new `AvoidContractions` rule by @elijah-potter in https://github.com/Automattic/harper/pull/3397 * feat(desktop): auto update by @elijah-potter in https://github.com/Automattic/harper/pull/3448 ## New Contributors * @muhammed-mukthar made their first contribution in https://github.com/Automattic/harper/pull/3227 * @JasonTheAdams made their first contribution in https://github.com/Automattic/harper/pull/3278 * @cfcryptotrader-rgb made their first contribution in https://github.com/Automattic/harper/pull/3376 * @kimjune01 made their first contribution in https://github.com/Automattic/harper/pull/3336 * @SAY-5 made their first contribution in https://github.com/Automattic/harper/pull/3363 * @impetus82 made their first contribution in https://github.com/Automattic/harper/pull/3379 * @Dronakurl made their first contribution in https://github.com/Automattic/harper/pull/3407 * @jlaportebot made their first contribution in https://github.com/Automattic/harper/pull/3424 **Full Changelog**: https://github.com/Automattic/harper/compare/v2.1.0...v2.2.0