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