Repository navigation
Releases: Automattic/harper
Releases · Automattic/harper
Release list
v2.12.0
What's Changed
- feat: flag redundant "almost" + "nearly" by @hippietrail in #4408
- fix(desktop): only update the tray icon when the service state changes by @willherr72 in #4017
- build(deps): bump pnpm/action-setup from 6.0.10 to 6.1.0 in the actions-minor-patch group across 1 directory by @dependabot[bot] in #4382
- feat(web): brand-new Chrome Extension "Installed!" page by @elijah-potter in #4419
- feat: condensated → condensed by @hippietrail in #4439
- feat: adds suggestions to
QuoteSpacingby @hippietrail in #3724 - feat(core): capture range for
SequenceExprby @86xsk in #2994 - fix(core): someone being pedantic in my presentation by @elijah-potter in #4443
- build(deps): bump rustls-webpki from 0.103.10 to 0.103.13 by @dependabot[bot] in #3221
- build(deps): bump is-macro from 0.3.7 to 0.3.8 by @dependabot[bot] in #4444
- feat(desktop): allow users to add new apps automatically by @elijah-potter in #4356
- fix(harper-editor): do not adopt text color of pasted input by @elijah-potter in #4441
- fix(harper-typst): contraction parsing errors by @Koranir in #4418
- feat: warn when a linter test has the same text for the error and the fix by @hippietrail in #4433
- fix: missing static analysis from some projects by @elijah-potter in #4451
- feat(web): show deltas on graphs by @elijah-potter in #4424
- fix(missing_to): avoid false positive on participial verbs in prepositional phrases by @vjymisal0 in #4204
- feat: went ahead and enable→went ahead and enabled by @hippietrail in #4456
- refactor(web): SlideDeck into own component by @elijah-potter in #4449
- fix(linting): stop OneOfTheSingular flagging 'one of the latter/former' by @Yi-111-a in #4463
- fix: typo 'than' correct to 'that' by @hippietrail in #4466
- fix(desktop): the weird macOS icon problem by @elijah-potter in #4457
- fix(core): stop SplitWords treating short non-anchor words as split anchors by @vjymisal0 in #4212
- fix(chrome-ext): fix test setup to avoid race conditions by @elijah-potter in #4485
- feat(chrome-ext): add loading state to report buttons by @elijah-potter in #4462
- fix(chrome-ext): fix several Google Docs problems by @elijah-potter in #4484
- chore: add 'trilemma' to dictionary by @Yi-111-a in #4475
- fix: rename
is_verb_regular_past_form()tois_verb_preterite_and_participle_form()by @hippietrail in #4461 - feat: on daily basis → on a daily basis by @hippietrail in #4427
- Dictionary curation 2026-09-12 by @hippietrail in #4365
- feat: set up a bad example→set a bad example by @hippietrail in #4488
- feat: add a debug printf to the linter asserts using
cfg!(debug_assertions)by @hippietrail in #4354 - build(deps): bump clap from 4.6.6 to 4.6.7 by @dependabot[bot] in #4497
- fix(dict): remove noun flag from e.g. to prevent OxfordComma false positives (#4479) by @Yi-111-a in #4480
- fix(harper-core): keep possessive its unflagged after prepositions by @Punisheroot in #4437
- refactor(desktop): move update checking to Rust and run it on a schedule by @elijah-potter in #4494
- feat: seize control over→seize control of by @hippietrail in #4515
- feat: hallucinization→hallucination by @hippietrail in #4516
- feat(desktop): create a better onboarding experience by @elijah-potter in #4495
- feat: comfortable of→comfortable with by @hippietrail in #4519
New Contributors
- @Koranir made their first contribution in #4418
- @vjymisal0 made their first contribution in #4204
- @Yi-111-a made their first contribution in #4463
- @Punisheroot made their first contribution in #4437
Full Changelog: v2.11.0...v2.12.0
v2.11.0
What's Changed
- fix(web): color of the logo used in loading animation by @elijah-potter in #4349
- feat: mixing up "bane" (of one's existence) and "bain" (marie) by @hippietrail in #4353
- feat: hi-jack/high jack → hijack by @hippietrail in #4355
- feat: such shame → such a shame by @hippietrail in #4359
- chore: dictionary curation by @hippietrail in #4360
- feat: mixing up summary and summery by @hippietrail in #4363
- feat(web): count update check requests by @elijah-potter in #4362
- fix(harper-tex): mask horizontal whitespace before % comments by @jurajkl in #3108
- chore: enhance
SummarySummeryandThenThanby @hippietrail in #4366 - feat: add "FFT" and "BWT" transforms to
RedundantAcronymsby @hippietrail in #4369 - feat: bare-bone → bare-bones by @hippietrail in #4372
- feat: in of themselves → in (and of) themselves by @hippietrail in #4373
- feat: ootb → out of the box by @hippietrail in #4378
- feat: a break through → a breakthrough by @hippietrail in #4380
- build: remove Harper Desktop from workspace by @elijah-potter in #4329
- feat: rogue vs rouge by @hippietrail in #4280
- fix: don't flag "defo" by @hippietrail in #4390
- build(deps): bump open from 5.4.2 to 5.4.4 by @dependabot[bot] in #4396
- build(deps): bump indexmap from 2.14.0 to 2.14.2 by @dependabot[bot] in #4397
- fix: give
MassPluralshigher priority thanSplitWordsby @hippietrail in #4347 - fix(web): make the
<Loader />less irksome by @elijah-potter in #4401 - feat(chrome-ext): redesign suggestion popup by @elijah-potter in #4406
- fix(desktop): major barriers to good performance by @elijah-potter in #4394
- feat(desktop): add Day One as a default app. by @elijah-potter in #4402
- fix(desktop): don't close service when closing settings by @elijah-potter in #4403
Full Changelog: v2.10.0...v2.11.0
v2.10.0
What's Changed
- feat: a jar & a kimbo → ajar & akimbo by @hippietrail in #4249
- feat: final nail on the coffin → in by @hippietrail in #4251
- build(deps): bump cargo-bins/cargo-binstall from 910d9e4456ce4b039662d2a02a34ef1d23c3c50c to 5aafaaca52423a22d83a812fa3ca77492e2895db by @dependabot[bot] in #4259
- build(deps): bump redhat-actions/buildah-build from 2.13 to 3 in the actions-major group by @dependabot[bot] in #4258
- feat: take control over→take control of by @hippietrail in #4262
- feat: remove redundant relative pronoun after which- pronouns by @hippietrail in #4254
- refactor: convert two linter pairs to use
OneOfManyby @hippietrail in #4211 - feat: take pride of → take pride in by @hippietrail in #4273
- feat: legit → legitimate by @hippietrail in #4271
- build(deps): bump itertools from 0.14.0 to 0.15.0 by @dependabot[bot] in #4276
- build(deps): bump open from 5.4.1 to 5.4.2 by @dependabot[bot] in #4277
- chore(chrome-ext): remove Prettier dep by @elijah-potter in #4266
- refactor(web): move web components into central library by @elijah-potter in #4264
- feat: provocate → provoke by @hippietrail in #4278
- feat: fix odd variants of chicken-and-egg problem by @hippietrail in #4222
- feat: at the first place→in the first place by @hippietrail in #4215
- chore: dictionary curation by @hippietrail in #4248
- feat: various mistakes with
lots,lot's, anda lotby @hippietrail in #4289 - feat: on a fence → on the fence by @hippietrail in #4300
- feat: afict → as far as I can tell by @hippietrail in #4301
- fix(core): replace the
reexecutedictionary entry withre-executeby @mauropereiira in #4042 - feat: not without a lack of → not for lack of by @hippietrail in #4306
- feat: pleaded vs pled by @hippietrail in #4308
- feat: play a factor → play a part/role / be a factor by @hippietrail in #4310
- feat: a waist of → a waste of by @hippietrail in #4317
- feat: take advantage a→take advantage of by @jvoisin in #3999
- fix: correct also with singular "purpose" by @hippietrail in #4295
- fix(title-case): keep lowercase
xas a connector word by @pyrooka in #4238 - feat(web): add dashboard for user-submitted domain problem reports by @elijah-potter in #4267
- feat: OTOH → on the other hand by @hippietrail in #4313
- feat: methods for matching sg/pl nouns that are not both by @hippietrail in #4319
- build(deps): bump cargo-bins/cargo-binstall from 5aafaaca52423a22d83a812fa3ca77492e2895db to b874e25ea559687bec77e281e9b271aa1367b624 by @dependabot[bot] in #4324
- feat: publish some linter priorities that other linters refer to by @hippietrail in #4255
- fix: feeded → fed by @hippietrail in #4327
- feat: reversed engineer → reverse engineer by @hippietrail in #4312
- feat:
Wordctor for standard case combos; fave → favourite by @hippietrail in #3263 - feat: for same reason→for the same reason by @hippietrail in #3941
- refactor:
WordSetnow takes an iterator by @hippietrail in #4247 - feat(harper-ls): add configurable diagnostic delay by @Dronakurl in #3282
- Dictionary curation 2026 09 04 by @hippietrail in #4332
- feat: in ideal world → in an ideal world by @hippietrail in #4325
- feat: slippy slope → slippery slope by @hippietrail in #4338
- feat(web): add a link to the Edge extension by @elijah-potter in #4330
- fix: Google Docs bridge and replaceText issue for the popup suggestion by @Yuvi-raj-P in #3847
- feat: what dose -> what does by @FranBowden in #4318
- feat(web): add more interesting loader to the web editor by @elijah-potter in #4340
- build(deps): bump base64 from 0.22.1 to 0.23.1 by @dependabot[bot] in #4341
- build(deps): bump uiautomation from 0.25.0 to 0.25.1 by @dependabot[bot] in #4342
- feat: straight forward → straightforward by @hippietrail in #4343
- feat: show case → showcase by @hippietrail in #4345
- feat: deny offer → decline/reject by @hippietrail in #4348
New Contributors
- @pyrooka made their first contribution in #4238
- @Yuvi-raj-P made their first contribution in #3847
- @FranBowden made their first contribution in #4318
Full Changelog: v2.9.1...v2.10.0
v2.9.1
What's Changed
- chore: more irregular plurals by @hippietrail in #4040
- feat: look-a-like→lookalike/look-alike by @hippietrail in #4074
- chore: add "first founded" to
RedundantFirstsby @hippietrail in #4072 - feat: curious on/of→curious about by @hippietrail in #4080
- feat: finish touches→finishing touches by @hippietrail in #4081
- fix(core): do not flag Dickens as a swear by @mauropereiira in #4031
- feat: surrealness→surreality by @hippietrail in #4101
- feat: enhance the
ToTolinter by @hippietrail in #4100 - Update build tooling (fastlane to 2.238.0, Ruby 3.4.9, Xcode 26.6) by @mokagio in #4099
- fix(desktop): repair application picker by @mauropereiira in #4024
- fix(web): fix problems with the footer by @elijah-potter in #4046
- build(deps): bump uuid from 1.24.0 to 1.24.1 by @dependabot[bot] in #4123
- feat: 'npm' requires 'an', not 'a' by @hippietrail in #4146
- feat: flag confusing "tote" and "tout" by @hippietrail in #4147
- feat: dissemble→disassemble by @hippietrail in #3923
- feat: better off served→better off/better served by @hippietrail in #3946
- chore: dictionary curation by @hippietrail in #4073
- feat: get/go pass→get/go past by @hippietrail in #4121
- feat: a whole another/nother/'nother → a whole other by @hippietrail in #4145
- feat: all well in good→all well and good by @hippietrail in #4102
- feat: off-limit→off-limits by @hippietrail in #4083
- feat: underneath of→underneath/under by @hippietrail in #4148
- feat(editor): add placeholder text to the web editor by @elijah-potter in #4097
- build(deps): bump cached from 0.59.0 to 2.0.2 by @dependabot[bot] in #4125
- fix(core): stop
LetsConfusionflagging quantifiers afterlet'sby @mauropereiira in #4082 - fix(core): don't flag "no thanks to" as a missing refusal comma by @mauropereiira in #4088
- build(deps): bump the actions-minor-patch group with 2 updates by @dependabot[bot] in #4092
- feat: become missing→go missing by @hippietrail in #4021
- feat: backhand compliment→backhanded compliment by @hippietrail in #4169
- feat: three simple linters by @hippietrail in #4158
- feat: go into sleep→go to sleep by @hippietrail in #4201
- feat: in/on the grand scale of things→grand scheme by @hippietrail in #4179
- feat: combinate→combine by @hippietrail in #4178
- feat: strike of genius/luck → stroke of genius/luck by @hippietrail in #4217
- feat: dig under the hood → look under the hood by @hippietrail in #3878
- feat: in the same vain/vane/veins → in the same vein by @hippietrail in #4216
- feat: claim for fame → claim to fame by @hippietrail in #4221
- build(deps): bump ordered-float from 5.3.0 to 5.5.0 by @dependabot[bot] in #4225
- build(deps): bump pollster from 0.4.0 to 1.0.1 by @dependabot[bot] in #4227
- feat: seize to do → cease to do by @hippietrail in #4235
- fix(web): allow the Firefox extension to POST by @elijah-potter in #4231
- fix(web): weird spacing on the landing page by @elijah-potter in #4237
- refactor: upgrade
VeryLessto Rust linter to handle "too less" etc. by @hippietrail in #4229 - feat: correct wrong variants of welcome/greet with open arms by @hippietrail in #4241
- chore: dictionary curation by @hippietrail in #4230
- feat(desktop): add a
WindowsBrokerand use the Automation API to read text from apps by @elijah-potter in #4174 - feat(desktop): be able to apply suggestions by @elijah-potter in #4175
- refactor(desktop): remove default implementations of
OsBrokerby @elijah-potter in #4176 - feat(desktop): add methods to query installed applications by @elijah-potter in #4214
- feat(desktop): ignore disabled integrations on Windows by @elijah-potter in #4239
- feat(desktop): add padding to highlight hit boxes by @elijah-potter in #4240
- fix(desktop): suggestions will close before user interaction by @elijah-potter in #4243
- feat(desktop): disable highlights while windows move by @elijah-potter in #4245
- build(desktop): prepare workflow for building Windows by @elijah-potter in #4246
Full Changelog: v2.8.0...v2.9.1
v2.8.0
What's Changed
- feat(core): create pool of instantiated linters to amortize construction cost by @elijah-potter in #3904
- build(deps): bump regex from 1.12.3 to 1.13.1 by @dependabot[bot] in #3784
- feat(web): produce graphs and tables for reports by @elijah-potter in #3858
- fix(chrome-ext): do not allow lint updates to run at the same time or get dropped by @elijah-potter in #3908
- feat: PCB board redundancy by @hippietrail in #3919
- feat(dictionary): add entries for 'precess' and derivatives by @Silzinc in #3877
- build(deps): bump serde_with from 3.20.0 to 3.21.0 by @dependabot[bot] in #3831
- feat: take care about→take care of by @hippietrail in #3927
- fix(core): more adjustments to SplitWords by @elijah-potter in #3922
- feat: don't lint
.DS_Storeor.jsonfiles in dirs inharper-cli lintandjust lintby @hippietrail in #3401 - chore: "YAMLs" was incorrectly generated by @hippietrail in #3928
- fix(core): avoid to-too false positives outside adjective contexts by @hydraxman in #3883
- feat(bench): add WASM benchmark harness and native allocation profiler by @k4sperski in #3153
- fix: avoid memory leak in JS products by @elijah-potter in #3917
- fix: "a software renderer" no longer flagged by @hippietrail in #3945
- docs(github): add a new option to the "AI Disclosure section" by @hippietrail in #3947
- chore: dictionary curation by @hippietrail in #3953
- build(deps): bump uuid from 1.23.0 to 1.24.0 by @dependabot[bot] in #3963
- build(deps): bump indexmap from 2.13.1 to 2.14.0 by @dependabot[bot] in #3962
- build(deps): bump clap from 4.6.0 to 4.6.1 by @dependabot[bot] in #3246
- fix(core): tag fought and wrought as past forms by @hydraxman in #3930
- Dictionary curation 2026 08 04 b by @hippietrail in #3965
- feat: accuse for→accuse of by @hippietrail in #3976
- chore: dictionary curation by @hippietrail in #3977
- fix: distracting warning in desktop app by @hippietrail in #4005
- fix(core): proper-noun coverage for Apple i-products and product phrases by @johndecker3 in #3436
- fix(core): preserve camelCase proper nouns in title case by @johndecker3 in #3438
- fix: remove dead TAILWIND_MODE env var that breaks Windows builds by @willherr72 in #3957
- build(deps): bump actions/stale from 10 to 11 in the actions-major group across 1 directory by @dependabot[bot] in #4003
- feat: implement into→implement in by @hippietrail in #3959
- chore: dictionary curation by @hippietrail in #4018
- Add Elixir as a supported language (comments only) by @jaller698 in #3934
- feat(core): flag extraneous "so" in "very much so" by @ozpool in #3817
- Obsidian sidebar by @LukeBenhase in #3915
- fix(obsidian): plugin failing to load due to race condition by @elijah-potter in #4020
- build(deps): bump rand from 0.10.1 to 0.10.2 by @dependabot[bot] in #4027
- build(deps): bump libfuzzer-sys from 0.4.12 to 0.4.13 by @dependabot[bot] in #4026
- build(deps): bump ruzstd from 0.8.3 to 0.9.0 by @dependabot[bot] in #4025
- feat(core): add zero-width negation expression by @floze-the-genius in #3850
- fix(core): add "understand" to the irregular verb list by @mauropereiira in #4036
- feat: unpossible etc. → impossible by @hippietrail in #3081
- chore: some
.tomlfiles had divergentdescription,edition, orversionfields by @hippietrail in #3969 - fix(core): remove redundant copy of dictionary in
FstDictionaryby @elijah-potter in #4030 - fix(desktop): persist onboarding completion by @mauropereiira in #4022
- Fix/slack quill editor linting by @iuooip in #4033
New Contributors
- @Silzinc made their first contribution in #3877
- @hydraxman made their first contribution in #3883
- @johndecker3 made their first contribution in #3436
- @willherr72 made their first contribution in #3957
- @jaller698 made their first contribution in #3934
- @ozpool made their first contribution in #3817
- @LukeBenhase made their first contribution in #3915
- @floze-the-genius made their first contribution in #3850
- @mauropereiira made their first contribution in #4036
- @iuooip made their first contribution in #4033
Full Changelog: v2.7.0...v2.8.0
v2.7.0
What's Changed
- refactor: more vec ctors and builders converted to iterators per #3670 by @hippietrail in #3712
- build(deps): bump egui from 0.34.2 to 0.34.3 by @dependabot[bot] in #3674
- build(deps): bump the actions-minor-patch group across 1 directory with 3 updates by @dependabot[bot] in #3695
- build(deps): bump nokogiri from 1.19.3 to 1.19.4 by @dependabot[bot] in #3701
- feat: max exodus→mass exodus by @hippietrail in #3637
- feat: add "standard option" to
Oxymoronsby @hippietrail in #3651 - feat: level of details→level of detail/levels of detail by @hippietrail in #3486
- feat: on one's own accord→of one's own accord by @hippietrail in #3646
- feat: on top off/ontop off/on topof → on top of by @hippietrail in #3400
- feat: that's here nor there→that's neither here nor there by @hippietrail in #3606
- feat: as much than→as much as by @hippietrail in #3493
- feat: Expand
conf,config,perf, andprefby @hippietrail in #3535 - feat: over [number] plus→over [number] + [number] plus by @hippietrail in #3634
- Fixes three false positives when "A" or "B" are school test grades by @hippietrail in #3718
- feat: no longer I→I no longer by @hippietrail in #3611
- fix: remove debug print statements and related comments by @hippietrail in #3358
- refactor: standardize inline bounds syntax for linters by @hippietrail in #3601
- refactor:
PhrasalVerbAsCompoundNounnow doesn't flag "meltdown ended up" by @hippietrail in #3599 - feat: in this/that regards→in this/that regard by @hippietrail in #3482
- feat: in retaliation to→in retaliation for/in response to by @hippietrail in #3476
- feat: jump a gun/jump the guns→jump the gun by @hippietrail in #3404
- feat:by my own→on my own/by myself by @hippietrail in #3322
- docs: add inline-scribe to Projects Using Harper by @mk668a in #3719
- feat: a mean to an end→a means to an end by @hippietrail in #3720
- refactor(core): introduce
SequenceExpr::number()constructor by @hippietrail in #3732 - build(deps): bump actions/checkout from 6.0.3 to 7.0.0 in the actions-major group by @dependabot[bot] in #3727
- fix: allow lowercase mp3 after an by @cfcryptotrader-rgb in #3369
- Expose English isolation in harper.js and browser extension by @mirsella in #3669
- build(deps): bump faraday from 1.10.5 to 1.10.6 by @dependabot[bot] in #3735
- feat: call it quit→call it quits by @hippietrail in #3740
- feat(core): criterion by @elijah-potter in #3698
- docs: copy the agent policy to be inside the repository by @elijah-potter in #3738
- docs(obsidian): make the "Ignored Files" setting description more helpful by @elijah-potter in #3737
- build(deps): bump sysinfo from 0.38.4 to 0.39.5 by @dependabot[bot] in #3747
- feat: lint the Source Control commit message box by @dmytrosorokame in #3729
- chore: dictionary curation for 2026/06/13 by @hippietrail in #3654
- docs(harper-ls): declare that we only support the latest stable Rust version by @elijah-potter in #3745
- refactor(desktop): make things human-readable by @elijah-potter in #3734
- refactor(web): de-slopify and centralize components by @elijah-potter in #3744
- feat: link list→linked list by @hippietrail in #3742
- refactor: centralize suggestion transformation depth limit #3597 by @jdgajjar in #3614
- build(deps): bump cargo-bins/cargo-binstall from f8810ffa11196f23afb38e6fb64716fbf814ad8f to 910d9e4456ce4b039662d2a02a34ef1d23c3c50c by @dependabot[bot] in #3728
- refactor: missed lint message
.to_string()change to.to_owned()by @hippietrail in #3749 - feat: for nth time→for the nth time by @hippietrail in #3750
- feat: clearly state that the desktop app is in beta by @elijah-potter in #3751
- fix(desktop): improve battery life by @elijah-potter in #3753
- Avoid mass noun lints for ing modifiers by @puneetdixit200 in #3457
- fix(core): use
default_config.jsonas the canonical config by @elijah-potter in #3755 - perf(lint-framework): remove unconditional lint polling by @Elias0419 in #3678
- feat: truth to the fact→truth to the claim etc. by @hippietrail in #3394
- fix: 2 unused imports and 1 nested if by @hippietrail in #3759
- feat: Redundant self-harm onself, self-teach oneself, do self-harm to oneself, self host it oneself by @hippietrail in #3326
- feat: may of us/you/them→many of ... by @hippietrail in #3761
- feat: not along after/afterward/afterwards→not long ... by @hippietrail in #3762
- feat: analog/acoustic bike→pushbike/pedal bike by @hippietrail in #3444
- build: improve iteration speed on several fronts by @elijah-potter in #3756
- build(deps): bump the actions-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in #3773
- test(chrome-plugin): always run "headless" when testing + increase workers by @elijah-potter in #3783
- feat(chrome-ext): inline HN page for testing by @elijah-potter in #3825
- feat: a little of practice → a little / a bit of by @hippietrail in #3839
- feat: till date→to date by @hippietrail in #3706
- feat: into a different direction→in a different direction by @hippietrail in #3665
- feat: throw the baby with the bathwater → throw out / throw the baby out by @hippietrail in #3827
- feat: helped built → helped build etc. by @hippietrail in #3823
- feat: have hard time → have a hard time by @hippietrail in #3812
- chore: remove temporary commented-out code by @hippietrail in #3849
- feat(docs): clearly define testing strategy by @elijah-potter in #3845
- fix(desktop): lagging status indicator by @elijah-potter in #3779
- chore: dictionary curation by @hippietrail in #3824
- feat: fall a distance below→fall a distance by @hippietrail in #3733
- feat: have ways to go → have a ways to go by @hippietrail in #3810
- fix: new clippy warnings in rust 1.97.0 by @hippietrail in #3797
- feat: passionate of→passionate about by @hippietrail in #3743
- feat: how do/does x compared/compares→compare by @hippietrail in #3770
- feat: barely unusable → barely usable etc. by @hippietrail in #3774
- feat: be pale by/in comparison → to pale by/in comparison by @hippietrail in #3796
- feat: on stock→in stock by @hippietrail in #3788
- fix(chrome-ext): inline Draft.js and Prosemirror pages by @elijah-potter in #3854
- feat: neither fish nor foul/bird → fowl by @hippietrail in #3767
- fix: correct bad verb dictionary entries by @hippietrail in #3864
- feat: no harm no fowl→no harm no foul by @hippietrail in #3768
- feat: fix redundant "first invented" / "invented for the first time" by @hippietrail in #3790
- style: group and format individual linters and generators cleanly in … by @hippietrai...
v2.6.0
What's Changed
- feat: now a days→nowadays; add to discourse markers by @hippietrail in #3392
- feat: the entire of→the entirety of by @hippietrail in #3604
- feat: leaving in drones→leaving in droves by @hippietrail in #3636
- fix(core): support multiple brackets in rune matcher by @marcbachmann in #3608
- feat: tho→though by @hippietrail in #3526
- feat(desktop): mark support for Slack and Discord by @elijah-potter in #3641
- docs: grammar fix(es) in
contributors/desktopby @hippietrail in #3645 - feat: dir → directory by @hippietrail in #3470
- fix: don't flag missing "to" between "want" and a noun+verb word by @hippietrail in #3649
- feat(cli): allow
formssubcommand to accept multiple arguments by @abhishekDeshmukh74 in #2996 - feat: app picker bundle ID lookup by @hippietrail in #3653
- feat: as compare to→as compared to by @hippietrail in #3647
- refactor: introduce
SequenceExpr::word_seq()by @hippietrail in #3659 - Add version numbers next to key integrations that are often not up-to-date with the GitHub version by @hippietrail in #3553
- feat: (since) indefinite durations by @hippietrail in #3283
- feat: a handful of more → a handful more by @hippietrail in #3223
- feat: convenient store→convenience store by @hippietrail in #3113
- feat: the last days→the last few days by @hippietrail in #3268
- feat: feet/inches and minutes/seconds from '/" to ′/″ by @hippietrail in #3275
- feat: fix run into problem/a trouble/troubles by @hippietrail in #3685
- feat: in depth→in-depth by @hippietrail in #3684
- docs: Describe what a Harper Committer is by @elijah-potter in #3687
- feat: cross platform→cross-platform by @hippietrail in #3689
- feat: and the such→and such; as long that→as long as by @hippietrail in #3675
- feat: hazzle→hassle by @hippietrail in #3690
- feat: in do course→in due course by @hippietrail in #3693
- chore(dict): add 'Juneteenth' to dictionary by @yunusey in #3692
- feat: read and write→reads and writes/read and write by @hippietrail in #3697
- chore(harper.js): update examples to latest API by @elijah-potter in #3668
- Add PhrAIse to "Projects Using Harper" by @hqrrr in #3676
- fix(chrome-ext): work within Gutenberg
<iframe />s by @elijah-potter in #3702 - fix(obsidian): stale data on the Settings page by @elijah-potter in #3703
- feat(gitcommit): use tree-sitter for gitcommit by @Crysthamus in #3681
- refactor: optimize
FirstMatchOf/LongestMatchOfctors to accept generic iterators by @hippietrail in #3670 - feat: to to -> to do by @Cyncrovee in #3294
- feat(desktop): better search and icons for app modal by @elijah-potter in #3704
New Contributors
- @marcbachmann made their first contribution in #3608
- @abhishekDeshmukh74 made their first contribution in #2996
- @yunusey made their first contribution in #3692
- @hqrrr made their first contribution in #3676
- @Crysthamus made their first contribution in #3681
- @Cyncrovee made their first contribution in #3294
Full Changelog: v2.5.0...v2.6.0
v2.5.0
What's Changed
- fix(core): false-positive after contraction by @elijah-potter in #3595
- fix(core): ignore the letter
swhen found in a parenthesis after a word by @elijah-potter in #3596 - feat(weir): add BoarderBorder rule to catch boarder/border word confusion by @jlaportebot in #3481
- feat: impressed of→impressed by/with by @hippietrail in #3566
- fix(title_case): don't capitalize am/pm in time expressions by @jlaportebot in #3456
- fix: treat semicolons as chunk separators by @azmifarih in #3426
- feat: GOP party → GOP / Grand Old Party by @hippietrail in #3232
- fix(desktop): make macOS accessibility activation work when AXEnhancedUserInterface is rejected by @markduan in #3600
- refactor: standardize on
.to_owned()formessagein linters by @hippietrail in #3569 - feat: as how→as to how by @hippietrail in #3629
- docs: add Indian English to web
meta/descriptionby @hippietrail in #3626 - feat: a complain→a complaint by @hippietrail in #3622
- fix: digged→dug by @hippietrail in #3618
- feat: indian english "godown" is "warehouse" elsewhere by @hippietrail in #3619
- feat: out (of) the window variant matching dialect by @hippietrail in #3620
- feat: lmk→let me know by @hippietrail in #3616
- feat: inspired from→inspired by by @hippietrail in #3427
- feat: in the very least→at the very least by @hippietrail in #3441
- feat:
quietswitch forharper-cli lintby @hippietrail in #3583 - feat: environmental variable→environment variable by @hippietrail in #3537
- Capitalize off by @hippietrail in #3521
- feat: now know as→now known as by @hippietrail in #3609
- dictionary curation 2026-06-05 by @hippietrail in #3598
- fix: don't flag when contraction comes after a form of be, only before by @hippietrail in #3572
- build(deps): bump serde_json from 1.0.149 to 1.0.150 by @dependabot[bot] in #3624
New Contributors
- @azmifarih made their first contribution in #3426
- @markduan made their first contribution in #3600
Full Changelog: v2.4.0...v2.5.0
v2.4.0
What's Changed
- docs: add Desktop app to list of platforms by @hippietrail in #3530
- feat: fellow coworker→fellow worker/coworker by @hippietrail in #3478
- feat: proof-of-concepts→proofs-of-concept by @hippietrail in #3562
- feat: pay for check/fee/price→pay check/fee/price by @hippietrail in #3567
- docs: add comprehensive website contribution guide by @jdgajjar in #3561
- fix: don't flag more low-hanging fruit→lower-hanging by @hippietrail in #3571
- chore: pin third-party GitHub Actions to commit SHAs by @mahangu in #3573
- fix: don't flag CVEs by @hippietrail in #3582
- feat: at face values→at face value by @hippietrail in #3578
- chore: dictionary curation by @hippietrail in #3579
- Update vulnerable JS transitive dependencies by @lancewillett in #3555
- feat(desktop): expand role selection by @elijah-potter in #3546
- fix: prevent false positive "quite" → "quiet" (#3560) by @jdgajjar in #3575
- refactor: avoid complex type warning by @hippietrail in #3570
- feat: the the→that the by @hippietrail in #3549
- feat: incidence report→incident report by @hippietrail in #3593
- refactor(desktop): misc. changes and documentation by @elijah-potter in #3594
- fix(harper.js): slow message passing from slow cache lookups by @elijah-potter in #3588
- build(deps): bump tar from 0.4.45 to 0.4.46 by @dependabot[bot] in #3547
- build(deps): bump jwt from 2.10.3 to 3.2.0 by @dependabot[bot] in #3534
- build(deps): bump lru from 0.16.3 to 0.18.0 by @dependabot[bot] in #3556
- feat: curious/unsure to why etc→as to why etc by @hippietrail in #3538
- chore: add chocked/chucked/choked full to chock-full linter by @hippietrail in #3335
- feat: cache 22/cash 22→catch 22 by @hippietrail in #3548
- feat: USD dollars→USD/US dollars by @hippietrail in #3467
- build(deps): bump the actions-major group with 6 updates by @dependabot[bot] in #3585
New Contributors
- @jdgajjar made their first contribution in #3561
- @mahangu made their first contribution in #3573
- @lancewillett made their first contribution in #3555
Full Changelog: v2.3.1...v2.4.0
v2.3.1
What's Changed
- feat(desktop): add report issue buttons to menus by @elijah-potter in #3543
- fix(desktop): rename to
Harperby @elijah-potter in #3542 - Dictionary curation for May 22, 2026 by @hippietrail in #3469
- fix(desktop): exit child when parent stops by @elijah-potter in #3544
- fix(web): make correct font "important" by @elijah-potter in #3545
Full Changelog: v2.3.0...v2.3.1