Commit log

0af4499 docs: add github trending (#1236)

Click to expand commit body
## What?

Added a github trending to the README

## Why?

Drew Smirnoff created

cd409ca feat(config): add LRU eviction (#1227)

Click to expand commit body
## What?

Implemented a size-based LRU (Least Recently Used) eviction policy for
the email body cache.

## Why?

The cache grows without bound, reaching hundreds of `MB` or `GB` after
heavy use. This causes disk quota issues on devices with small storage.

Closes #1171

Mohamed Mahmoud created

fba7663 chore(deps): cachix/install-nix-action ^ (#1232)

Floatpane Bot created

3c00cf6 feat: manupulate bodies from plugins (#1226)

Click to expand commit body
## What?

This adds one focused extension point: post-render body transformation
with raw-source access. Plugins can now:

- Recolor / bold / italicize matched substrings (`gsub` +
`matcha.style`)
- Remove parts of the body (`gsub` with `""`)
- Parse the raw HTML/plain source and prepend or fully replace the
displayed output

## Why?

Plugin SDK previously had no way to touch displayed email content.

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

4a1229e docs: add sponsors to README (#1225)

Click to expand commit body
## What?

Adds our sponsors to README and a message for GitAds

## Why?

To publically thank our sponsors.

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

9d37365 ci: add labeler configuration for PRs (#1224)

Drew Smirnoff created

464f82a ci: better stale issues (#1220)

Drew Smirnoff created

3d54db8 docs: update demo.gif (#1223)

Click to expand commit body
## What?

Replaces `public/assets/demo.gif` with a freshly recorded VHS run.

## Why?

Keeps the demo GIF aligned with the latest release so README and docs
reflect current behaviour. Generated automatically by the Update Demo
VHS workflow.

Floatpane Bot created

9393de4 chore(deps): actions/github-script ^ v9 (#1221)

Click to expand commit body
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/github-script](https://redirect.github.com/actions/github-script)
| action | major | `v7` β†’ `v9` |

---

### Release Notes

<details>
<summary>actions/github-script (actions/github-script)</summary>

###
[`v9`](https://redirect.github.com/actions/github-script/compare/v9.0.0...v9.0.0)

[Compare
Source](https://redirect.github.com/actions/github-script/compare/v9.0.0...v9.0.0)

###
[`v9.0.0`](https://redirect.github.com/actions/github-script/releases/tag/v9.0.0)

[Compare
Source](https://redirect.github.com/actions/github-script/compare/v8.0.0...v9.0.0)

**New features:**

- **`getOctokit` factory function** β€” Available directly in the script
context. Create additional authenticated Octokit clients with different
tokens for multi-token workflows, GitHub App tokens, and cross-org
access. See [Creating additional clients with
`getOctokit`](https://redirect.github.com/actions/github-script#creating-additional-clients-with-getoctokit)
for details and examples.
- **Orchestration ID in user-agent** β€” The `ACTIONS_ORCHESTRATION_ID`
environment variable is automatically appended to the user-agent string
for request tracing.

**Breaking changes:**

- **`require('@&#8203;actions/github')` no longer works in scripts.**
The upgrade to `@actions/github` v9 (ESM-only) means
`require('@&#8203;actions/github')` will fail at runtime. If you
previously used patterns like `const { getOctokit } =
require('@&#8203;actions/github')` to create secondary clients, use the
new injected `getOctokit` function instead β€” it's available directly in
the script context with no imports needed.
- `getOctokit` is now an injected function parameter. Scripts that
declare `const getOctokit = ...` or `let getOctokit = ...` will get a
`SyntaxError` because JavaScript does not allow `const`/`let`
redeclaration of function parameters. Use the injected `getOctokit`
directly, or use `var getOctokit = ...` if you need to redeclare it.
- If your script accesses other `@actions/github` internals beyond the
standard `github`/`octokit` client, you may need to update those
references for v9 compatibility.

##### What's Changed

- Add ACTIONS\_ORCHESTRATION\_ID to user-agent string by
[@&#8203;Copilot](https://redirect.github.com/Copilot) in
[#&#8203;695](https://redirect.github.com/actions/github-script/pull/695)
- ci: use deployment: false for integration test environments by
[@&#8203;salmanmkc](https://redirect.github.com/salmanmkc) in
[#&#8203;712](https://redirect.github.com/actions/github-script/pull/712)
- feat!: add getOctokit to script context, upgrade
[@&#8203;actions/github](https://redirect.github.com/actions/github) v9,
[@&#8203;octokit/core](https://redirect.github.com/octokit/core) v7, and
related packages by
[@&#8203;salmanmkc](https://redirect.github.com/salmanmkc) in
[#&#8203;700](https://redirect.github.com/actions/github-script/pull/700)

##### New Contributors

- [@&#8203;Copilot](https://redirect.github.com/Copilot) made their
first contribution in
[#&#8203;695](https://redirect.github.com/actions/github-script/pull/695)

**Full Changelog**:
<https://github.com/actions/github-script/compare/v8.0.0...v9.0.0>

###
[`v8`](https://redirect.github.com/actions/github-script/releases/tag/v8):
.0.0

[Compare
Source](https://redirect.github.com/actions/github-script/compare/v8.0.0...v8.0.0)

##### What's Changed

- Update Node.js version support to 24.x by
[@&#8203;salmanmkc](https://redirect.github.com/salmanmkc) in
[#&#8203;637](https://redirect.github.com/actions/github-script/pull/637)
- README for updating actions/github-script from v7 to v8 by
[@&#8203;sneha-krip](https://redirect.github.com/sneha-krip) in
[#&#8203;653](https://redirect.github.com/actions/github-script/pull/653)

##### ⚠️ Minimum Compatible Runner Version

**v2.327.1**\
[Release
Notes](https://redirect.github.com/actions/runner/releases/tag/v2.327.1)

Make sure your runner is updated to this version or newer to use this
release.

##### New Contributors

- [@&#8203;salmanmkc](https://redirect.github.com/salmanmkc) made their
first contribution in
[#&#8203;637](https://redirect.github.com/actions/github-script/pull/637)
- [@&#8203;sneha-krip](https://redirect.github.com/sneha-krip) made
their first contribution in
[#&#8203;653](https://redirect.github.com/actions/github-script/pull/653)

**Full Changelog**:
<https://github.com/actions/github-script/compare/v7.1.0...v8.0.0>

###
[`v8.0.0`](https://redirect.github.com/actions/github-script/compare/v7.1.0...v8.0.0)

[Compare
Source](https://redirect.github.com/actions/github-script/compare/v7.1.0...v8.0.0)

###
[`v7.1.0`](https://redirect.github.com/actions/github-script/releases/tag/v7.1.0)

[Compare
Source](https://redirect.github.com/actions/github-script/compare/v7.0.1...v7.1.0)

##### What's Changed

- Upgrade husky to v9 by
[@&#8203;benelan](https://redirect.github.com/benelan) in
[#&#8203;482](https://redirect.github.com/actions/github-script/pull/482)
- Add workflow file for publishing releases to immutable action package
by [@&#8203;Jcambass](https://redirect.github.com/Jcambass) in
[#&#8203;485](https://redirect.github.com/actions/github-script/pull/485)
- Upgrade IA Publish by
[@&#8203;Jcambass](https://redirect.github.com/Jcambass) in
[#&#8203;486](https://redirect.github.com/actions/github-script/pull/486)
- Fix workflow status badges by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;497](https://redirect.github.com/actions/github-script/pull/497)
- Update usage of `actions/upload-artifact` by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;512](https://redirect.github.com/actions/github-script/pull/512)
- Clear up package name confusion by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;514](https://redirect.github.com/actions/github-script/pull/514)
- Update dependencies with `npm audit fix` by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;515](https://redirect.github.com/actions/github-script/pull/515)
- Specify that the used script is JavaScript by
[@&#8203;timotk](https://redirect.github.com/timotk) in
[#&#8203;478](https://redirect.github.com/actions/github-script/pull/478)
- chore: Add Dependabot for NPM and Actions by
[@&#8203;nschonni](https://redirect.github.com/nschonni) in
[#&#8203;472](https://redirect.github.com/actions/github-script/pull/472)
- Define `permissions` in workflows and update actions by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;531](https://redirect.github.com/actions/github-script/pull/531)
- chore: Add Dependabot for .github/actions/install-dependencies by
[@&#8203;nschonni](https://redirect.github.com/nschonni) in
[#&#8203;532](https://redirect.github.com/actions/github-script/pull/532)
- chore: Remove .vscode settings by
[@&#8203;nschonni](https://redirect.github.com/nschonni) in
[#&#8203;533](https://redirect.github.com/actions/github-script/pull/533)
- ci: Use github/setup-licensed by
[@&#8203;nschonni](https://redirect.github.com/nschonni) in
[#&#8203;473](https://redirect.github.com/actions/github-script/pull/473)
- make octokit instance available as octokit on top of github, to make
it easier to seamlessly copy examples from GitHub rest api or octokit
documentations by
[@&#8203;iamstarkov](https://redirect.github.com/iamstarkov) in
[#&#8203;508](https://redirect.github.com/actions/github-script/pull/508)
- Remove `octokit` README updates for v7 by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;557](https://redirect.github.com/actions/github-script/pull/557)
- docs: add "exec" usage examples by
[@&#8203;neilime](https://redirect.github.com/neilime) in
[#&#8203;546](https://redirect.github.com/actions/github-script/pull/546)
- Bump ruby/setup-ruby from 1.213.0 to 1.222.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;563](https://redirect.github.com/actions/github-script/pull/563)
- Bump ruby/setup-ruby from 1.222.0 to 1.229.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;575](https://redirect.github.com/actions/github-script/pull/575)
- Clearly document passing inputs to the `script` by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;603](https://redirect.github.com/actions/github-script/pull/603)
- Update README.md by
[@&#8203;nebuk89](https://redirect.github.com/nebuk89) in
[#&#8203;610](https://redirect.github.com/actions/github-script/pull/610)

##### New Contributors

- [@&#8203;benelan](https://redirect.github.com/benelan) made their
first contribution in
[#&#8203;482](https://redirect.github.com/actions/github-script/pull/482)
- [@&#8203;Jcambass](https://redirect.github.com/Jcambass) made their
first contribution in
[#&#8203;485](https://redirect.github.com/actions/github-script/pull/485)
- [@&#8203;timotk](https://redirect.github.com/timotk) made their first
contribution in
[#&#8203;478](https://redirect.github.com/actions/github-script/pull/478)
- [@&#8203;iamstarkov](https://redirect.github.com/iamstarkov) made
their first contribution in
[#&#8203;508](https://redirect.github.com/actions/github-script/pull/508)
- [@&#8203;neilime](https://redirect.github.com/neilime) made their
first contribution in
[#&#8203;546](https://redirect.github.com/actions/github-script/pull/546)
- [@&#8203;nebuk89](https://redirect.github.com/nebuk89) made their
first contribution in
[#&#8203;610](https://redirect.github.com/actions/github-script/pull/610)

**Full Changelog**:
<https://github.com/actions/github-script/compare/v7...v7.1.0>

###
[`v7.0.1`](https://redirect.github.com/actions/github-script/releases/tag/v7.0.1)

[Compare
Source](https://redirect.github.com/actions/github-script/compare/v7...v7.0.1)

##### What's Changed

- Avoid setting `baseUrl` to undefined when input is not provided by
[@&#8203;joshmgross](https://redirect.github.com/joshmgross) in
[#&#8203;439](https://redirect.github.com/actions/github-script/pull/439)

**Full Changelog**:
<https://github.com/actions/github-script/compare/v7.0.0...v7.0.1>

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

πŸ“… **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

πŸ”• **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjAuNiIsInVwZGF0ZWRJblZlciI6IjQzLjE2MC42IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->

Floatpane Bot created

98ed666 chore(deps): actions/labeler ^ v6.0.1 (#1222)

Click to expand commit body
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/labeler](https://redirect.github.com/actions/labeler) |
action | major | `v5` β†’ `v6` |

---

### Release Notes

<details>
<summary>actions/labeler (actions/labeler)</summary>

###
[`v6.0.1`](https://redirect.github.com/actions/labeler/releases/tag/v6.0.1)

[Compare
Source](https://redirect.github.com/actions/labeler/compare/v6.0.0...v6.0.1)

##### What's Changed

- Upgrade publish-action from 0.2.2 to 0.4.0 by
[@&#8203;aparnajyothi-y](https://redirect.github.com/aparnajyothi-y) in
[#&#8203;901](https://redirect.github.com/actions/labeler/pull/901)

##### New Contributors

- [@&#8203;aparnajyothi-y](https://redirect.github.com/aparnajyothi-y)
made their first contribution in
[#&#8203;901](https://redirect.github.com/actions/labeler/pull/901)

**Full Changelog**:
<https://github.com/actions/labeler/compare/v6.0.0...v6.0.1>

###
[`v6`](https://redirect.github.com/actions/labeler/compare/v6.0.0...v6.0.0)

[Compare
Source](https://redirect.github.com/actions/labeler/compare/v6.0.0...v6.0.0)

###
[`v6.0.0`](https://redirect.github.com/actions/labeler/releases/tag/v6.0.0)

[Compare
Source](https://redirect.github.com/actions/labeler/compare/v5.0.0...v6.0.0)

##### What's Changed

- Add workflow file for publishing releases to immutable action package
by [@&#8203;jcambass](https://redirect.github.com/jcambass) in
[#&#8203;802](https://redirect.github.com/actions/labeler/pull/802)

##### Breaking Changes

- Upgrade Node.js version to 24 in action and dependencies
[@&#8203;salmanmkc](https://redirect.github.com/salmanmkc) in
[#&#8203;891](https://redirect.github.com/actions/labeler/pull/891)
Make sure your runner is on version v2.327.1 or later to ensure
compatibility with this release. [Release
Notes](https://redirect.github.com/actions/runner/releases/tag/v2.327.1)

##### Dependency Upgrades

- Upgrade eslint-config-prettier from 9.0.0 to 9.1.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;711](https://redirect.github.com/actions/labeler/pull/711)
- Upgrade eslint from 8.52.0 to 8.55.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;720](https://redirect.github.com/actions/labeler/pull/720)
- Upgrade [@&#8203;types/jest](https://redirect.github.com/types/jest)
from 29.5.6 to 29.5.11 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;719](https://redirect.github.com/actions/labeler/pull/719)
- Upgrade
[@&#8203;types/js-yaml](https://redirect.github.com/types/js-yaml) from
4.0.8 to 4.0.9 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;718](https://redirect.github.com/actions/labeler/pull/718)
- Upgrade
[@&#8203;typescript-eslint/parser](https://redirect.github.com/typescript-eslint/parser)
from 6.9.0 to 6.14.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;717](https://redirect.github.com/actions/labeler/pull/717)
- Upgrade prettier from 3.0.3 to 3.1.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;726](https://redirect.github.com/actions/labeler/pull/726)
- Upgrade eslint from 8.55.0 to 8.56.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;725](https://redirect.github.com/actions/labeler/pull/725)
- Upgrade
[@&#8203;typescript-eslint/parser](https://redirect.github.com/typescript-eslint/parser)
from 6.14.0 to 6.19.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;745](https://redirect.github.com/actions/labeler/pull/745)
- Upgrade eslint-plugin-jest from 27.4.3 to 27.6.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;744](https://redirect.github.com/actions/labeler/pull/744)
- Upgrade
[@&#8203;typescript-eslint/eslint-plugin](https://redirect.github.com/typescript-eslint/eslint-plugin)
from 6.9.0 to 6.20.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;750](https://redirect.github.com/actions/labeler/pull/750)
- Upgrade prettier from 3.1.1 to 3.2.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;752](https://redirect.github.com/actions/labeler/pull/752)
- Upgrade undici from 5.26.5 to 5.28.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;757](https://redirect.github.com/actions/labeler/pull/757)
- Upgrade braces from 3.0.2 to 3.0.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;789](https://redirect.github.com/actions/labeler/pull/789)
- Upgrade minimatch from 9.0.3 to 10.0.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;805](https://redirect.github.com/actions/labeler/pull/805)
- Upgrade
[@&#8203;actions/core](https://redirect.github.com/actions/core) from
1.10.1 to 1.11.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;811](https://redirect.github.com/actions/labeler/pull/811)
- Upgrade typescript from 5.4.3 to 5.7.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;819](https://redirect.github.com/actions/labeler/pull/819)
- Upgrade
[@&#8203;typescript-eslint/parser](https://redirect.github.com/typescript-eslint/parser)
from 7.3.1 to 8.17.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;824](https://redirect.github.com/actions/labeler/pull/824)
- Upgrade prettier from 3.2.5 to 3.4.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;825](https://redirect.github.com/actions/labeler/pull/825)
- Upgrade [@&#8203;types/jest](https://redirect.github.com/types/jest)
from 29.5.12 to 29.5.14 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;827](https://redirect.github.com/actions/labeler/pull/827)
- Upgrade eslint-plugin-jest from 27.9.0 to 28.9.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;832](https://redirect.github.com/actions/labeler/pull/832)
- Upgrade ts-jest from 29.1.2 to 29.2.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;831](https://redirect.github.com/actions/labeler/pull/831)
- Upgrade [@&#8203;vercel/ncc](https://redirect.github.com/vercel/ncc)
from 0.38.1 to 0.38.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;830](https://redirect.github.com/actions/labeler/pull/830)
- Upgrade typescript from 5.7.2 to 5.7.3 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;835](https://redirect.github.com/actions/labeler/pull/835)
- Upgrade eslint-plugin-jest from 28.9.0 to 28.11.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;839](https://redirect.github.com/actions/labeler/pull/839)
- Upgrade undici from 5.28.4 to 5.28.5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;842](https://redirect.github.com/actions/labeler/pull/842)
- Upgrade
[@&#8203;octokit/request-error](https://redirect.github.com/octokit/request-error)
from 5.0.1 to 5.1.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;846](https://redirect.github.com/actions/labeler/pull/846)

##### Documentation changes

- Add note regarding `pull_request_target` to README.md by
[@&#8203;silverwind](https://redirect.github.com/silverwind) in
[#&#8203;669](https://redirect.github.com/actions/labeler/pull/669)
- Update readme with additional examples and important note about
`pull_request_target` event by
[@&#8203;IvanZosimov](https://redirect.github.com/IvanZosimov) in
[#&#8203;721](https://redirect.github.com/actions/labeler/pull/721)
- Document update - permission section by
[@&#8203;harithavattikuti](https://redirect.github.com/harithavattikuti)
in [#&#8203;840](https://redirect.github.com/actions/labeler/pull/840)
- Improvement in documentation for pull\_request\_target event usage in
README by
[@&#8203;suyashgaonkar](https://redirect.github.com/suyashgaonkar) in
[#&#8203;871](https://redirect.github.com/actions/labeler/pull/871)
- Fix broken links in documentation by
[@&#8203;suyashgaonkar](https://redirect.github.com/suyashgaonkar) in
[#&#8203;822](https://redirect.github.com/actions/labeler/pull/822)

##### New Contributors

- [@&#8203;silverwind](https://redirect.github.com/silverwind) made
their first contribution in
[#&#8203;669](https://redirect.github.com/actions/labeler/pull/669)
- [@&#8203;Jcambass](https://redirect.github.com/Jcambass) made their
first contribution in
[#&#8203;802](https://redirect.github.com/actions/labeler/pull/802)
- [@&#8203;suyashgaonkar](https://redirect.github.com/suyashgaonkar)
made their first contribution in
[#&#8203;822](https://redirect.github.com/actions/labeler/pull/822)
-
[@&#8203;HarithaVattikuti](https://redirect.github.com/HarithaVattikuti)
made their first contribution in
[#&#8203;840](https://redirect.github.com/actions/labeler/pull/840)
- [@&#8203;salmanmkc](https://redirect.github.com/salmanmkc) made their
first contribution in
[#&#8203;891](https://redirect.github.com/actions/labeler/pull/891)

**Full Changelog**:
<https://github.com/actions/labeler/compare/v5...v6.0.0>

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

πŸ“… **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

πŸ”• **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjAuNiIsInVwZGF0ZWRJblZlciI6IjQzLjE2MC42IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->

Floatpane Bot created

35f7b1a ci: add more workflows for issues (#1220)

Click to expand commit body
## What?

Adds a lot more workflows to help handle issues and PRs better

## Why?

It is getting hard to triage issues and pull requests, this will likely
help

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

642cf3a fix: add panic recovery (#1209)

Mohamed Mahmoud created

309db4d fix(tui): add cyclic navigation (#1216)

Click to expand commit body
## What?

- Updated the `Update` function in `tui/choice.go` to modify the cursor
navigation logic.
- Implemented wrap-around (cyclic) navigation for the `up` and `down`
keybindings, allowing the cursor to loop seamlessly through the choices.

## Why?

- Currently, menu selection stops when reaching the first or last item,
requiring users to reverse direction to navigate the list.
- Implementing wrap-around navigation solves this problem. Now, moving
upward from the first item selects the last item, and moving downward
from the last item selects the first item.
- This provides a smoother, more natural navigation experience and
reduces unnecessary input keystrokes.
- closes #1215

HassanFouad created

5eac18c fix(nix): use gomod2nix and build scard (#1212)

Click to expand commit body
## What?
Switch from buildGoModule to gomod2nix's buildGoApplication so CGO
works, and add platform-specific dependencies (apple-sdk on macOS,
pcsclite on Linux). Add a CI job to keep gomod2nix.toml in sync.

## Why?
buildGoModule with CGO_ENABLED=0 prevented the scard smart card package
from linking against platform libraries.

Closes #1211

Endoze created

085e61a fix: reply with To address for catchall (#1217)

Click to expand commit body
## What?

Adds an automatic override for the `From` field in reply composer for
catch-all accounts

## Why?

Requested by @EmilyxFox on [Discord](https://discord.gg/jVnYTeSPV8).

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

459875f fix(fetcher): decode bad charset (#1214)

Click to expand commit body
## What?
- Fix `decodePart` so malformed `Content-Type` headers still go through
the charset decoder instead of returning raw bytes.
- Add a best-effort charset fallback for invalid media parameters.
- Add regression tests for malformed `Content-Type` with ISO-8859-1
bytes and malformed `Content-Type` without a charset.

Fixes #1085.

## Why?
Malformed `Content-Type` headers can still include a usable charset.
Returning raw bytes in that path makes non-UTF-8 email bodies render as
mojibake. Decoding with the best-effort charset keeps those messages
readable while preserving UTF-8 fallback behavior.

guyua9 created

0880d5a fix: add catch-all support (#1208)

Click to expand commit body
## What?


Ports catch-all support from GitLab

## Why?

Requested in #1201 and #1207

Co-authored-by: Steve Evans <steve@floatpane.com>
Co-authored-by: Andriy Chernov <andriy@floatpane.com>

Drew Smirnoff , Steve Evans , and Andriy Chernov created

ecc9b8f fix: allow subaddresses for gmail (#1206)

Click to expand commit body
## What?

Adds a check for `some+some@domain.com` for Gmail (sub-addressing)

## Why?

Closes #1200

---------

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

3bd7a8f fix(i18n): wrap error in loader (#1202)

Click to expand commit body
## What?

Replaced the `%v` verb with `%w` in `i18n/loader.go` when returning
errors from the embedded loader.

## Why?

The current implementation stringifies the underlying `err` using `%v`,
which breaks the error chain. This prevents callers from inspecting the
root cause using `errors.Is()` or `errors.As()`. Utilizing double `%w`
(supported in Go 1.20+) ensures both `ErrLoadFailed` and the original
error remain accessible in the error tree.

Closes #1051

Mohamed Mahmoud created

cecc8d3 fix(deps): update docusaurus monorepo to v3.10.1 (#1204)

Click to expand commit body
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@docusaurus/core](https://redirect.github.com/facebook/docusaurus)
([source](https://redirect.github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus))
| [`3.10.0` β†’
`3.10.1`](https://renovatebot.com/diffs/npm/@docusaurus%2fcore/3.10.0/3.10.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@docusaurus%2fcore/3.10.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@docusaurus%2fcore/3.10.0/3.10.1?slim=true)
|
|
[@docusaurus/module-type-aliases](https://redirect.github.com/facebook/docusaurus)
([source](https://redirect.github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-module-type-aliases))
| [`3.10.0` β†’
`3.10.1`](https://renovatebot.com/diffs/npm/@docusaurus%2fmodule-type-aliases/3.10.0/3.10.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@docusaurus%2fmodule-type-aliases/3.10.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@docusaurus%2fmodule-type-aliases/3.10.0/3.10.1?slim=true)
|
|
[@docusaurus/preset-classic](https://redirect.github.com/facebook/docusaurus)
([source](https://redirect.github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-preset-classic))
| [`3.10.0` β†’
`3.10.1`](https://renovatebot.com/diffs/npm/@docusaurus%2fpreset-classic/3.10.0/3.10.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@docusaurus%2fpreset-classic/3.10.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@docusaurus%2fpreset-classic/3.10.0/3.10.1?slim=true)
|
|
[@docusaurus/tsconfig](https://redirect.github.com/facebook/docusaurus)
([source](https://redirect.github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-tsconfig))
| [`3.10.0` β†’
`3.10.1`](https://renovatebot.com/diffs/npm/@docusaurus%2ftsconfig/3.10.0/3.10.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@docusaurus%2ftsconfig/3.10.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@docusaurus%2ftsconfig/3.10.0/3.10.1?slim=true)
|
| [@docusaurus/types](https://redirect.github.com/facebook/docusaurus)
([source](https://redirect.github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-types))
| [`3.10.0` β†’
`3.10.1`](https://renovatebot.com/diffs/npm/@docusaurus%2ftypes/3.10.0/3.10.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@docusaurus%2ftypes/3.10.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@docusaurus%2ftypes/3.10.0/3.10.1?slim=true)
|

---

### Release Notes

<details>
<summary>facebook/docusaurus (@&#8203;docusaurus/core)</summary>

###
[`v3.10.1`](https://redirect.github.com/facebook/docusaurus/blob/HEAD/CHANGELOG.md#3101-2026-04-30)

[Compare
Source](https://redirect.github.com/facebook/docusaurus/compare/v3.10.0...v3.10.1)

##### :bug: Bug Fix

- `docusaurus-bundler`
-
[#&#8203;11981](https://redirect.github.com/facebook/docusaurus/pull/11981)
fix(bundler): fix v3 webpackbar bug due to webpack breaking change
([@&#8203;slorber](https://redirect.github.com/slorber))

##### :wrench: Maintenance

- `docusaurus`
-
[#&#8203;11982](https://redirect.github.com/facebook/docusaurus/pull/11982)
chore: cherry-pick commits for v3.10.1 patch release
([@&#8203;slorber](https://redirect.github.com/slorber))

##### Committers: 1

- SΓ©bastien Lorber
([@&#8203;slorber](https://redirect.github.com/slorber))

</details>

---

### Configuration

πŸ“… **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

β™» **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

πŸ”• **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->

Floatpane Bot created

ee3b6d7 fix(daemon): notify only when new mail (#1205)

Click to expand commit body
## What?

Fixes notifications every 5 minutes whether or not there are new emails

## Why?

notifications were sent consistently, when not intended

EmilyxFox created

cdf3c7f fix: pass through in search (#1203)

Matt Van Horn created

ba6b659 docs: update feature screenshots (#1196)

Floatpane Bot created

0fc2447 docs: update demo.gif (#1195)

Floatpane Bot created

e892273 chore: defer file closes (#1180)

Click to expand commit body
## What?

Replaced manual `Close()` calls on every error path in the binary copy
block of `runUpdateCLI` with `defer`, and report close errors on `out`
via the named return value.

## Why?

The previous manual `Close()` calls on every return path were fragile
and silently discarded flush errors on `out`.

Closes #1056

Mohamed Mahmoud created

6780894 fix: change read path in i18n loader (#1193)

Click to expand commit body
## What?

Uses a different way to read locales in the `i18n` package.

The problem was with Windows compatibility, it returned an error,
because couldn't reach the file

## Why?

Closes #1192

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

72e6d3c feat(search): server-side email search (#1186)

Click to expand commit body
## What?

- Add `EmailSearcher` interface (`Search(ctx, folder, SearchQuery)
([]Email, error)`) to `backend.Provider`
- Add `SearchQuery` struct + `ParseSearchQuery` DSL parser supporting
`from:`, `to:`, `subject:`, `body:`, `since:`, `before:`, `larger:`,
plus quoted multi-word values and bare body terms
- IMAP backend: `fetcher.SearchMailbox` uses `go-imap/v2` `UIDSearch`,
prefers `ESEARCH RETURN (ALL)` (RFC 4731) when `imap.CapESearch` or
`imap.CapIMAP4rev2` is advertised, falls back to UID `SEARCH` for older
servers
- JMAP backend: `Email/query` with `FilterCondition` (`From`, `To`,
`Subject`, `Body`, `After`, `Before`, `MinSize`)
- POP3 backend: returns `backend.ErrNotSupported`
- TUI: new `SearchOverlay` triggered by `/` from inbox, results render
below the email list, Enter applies them as a temporary "Search Results"
view, Esc clears
- Multi-account: `/` from "All Accounts" runs across every supported
account; `ErrNotSupported` is skipped silently so a mixed IMAP+JMAP+POP3
setup still surfaces results from the supported backends
- Default keybind `inbox.search` = `/` in `default_keybinds.json`
- Demo helper at `screenshots/cmd/search_view/main.go` +
`screenshots/search_demo.tape` so the demo regenerates without IMAP
credentials
- Tests: parser DSL (quoted values, body precedence, mixed
prefixed+bare), JMAP filter assembly, fetcher criteria mapping, POP3
unsupported

## Why?

Matches the spec from issue #508 directly:

> Add a `Search(ctx context.Context, query string, folder string)
([]Email, error)` method to the `backend.Provider` interface ...
Implement using IMAP `SEARCH` ... JMAP `Email/query` filters ... search
TUI overlay (e.g. triggered by `/` key)

Sibling issue #1131 added the ESEARCH + DSL prefix detail (`from:`,
`to:`, `subject:`, `body:`, `since:`, `larger:`, ESEARCH RETURN ALL with
UID SEARCH fallback).

The launch thread on r/coolgithubprojects had filtering as the very
first comment ("By chance are there filtering options?"), so server-side
search closes both the maintainer's and a user-visible gap.

Closes #508. Partially addresses #1131. Out of scope: #1129 (full-text
index across folders).

---------

Signed-off-by: drew <me@andrinoff.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: drew <me@andrinoff.com>

Matt Van Horn , Matt Van Horn , and drew created

8cc9c37 fix(cache): trim <> from email keys (#1190)

Click to expand commit body
## What?

Add `<` and `>` to the trim cutset in `normalizeContactEmail` so the
cache key is the bare email regardless of whether the input came from a
header or a UI field. Whitespace and commas continue to be trimmed.

## Why?

Email addresses arriving from `From:` headers commonly come wrapped in
angle brackets (`<foo@bar.com>`). The previous trim cutset was `,` only,
so the cache stored the literal `<foo@bar.com>` and never matched future
lookups against `foo@bar.com`.

Resolves #1122.

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>

Matt Van Horn and Matt Van Horn created

fa179cc fix: randomize pgp boundary (#1191)

Click to expand commit body
## What?
- Replace the YubiKey PGP multipart/signed boundary timestamp with 16
bytes from crypto/rand.
- Keep a UnixNano fallback for rare random-source failures.
- Add focused tests for the random path and fallback formatting.

## Why?
MIME boundaries should not be predictable. The existing YubiKey path
used time.Now().Unix(), while other signing paths already prefer
crypto/rand with a timestamp fallback.

Closes #729

Joey Roth created

5fceae3 fix: notifications being sent when off (#1194)

Click to expand commit body
## What?


Added a reload config handler for the daemon and daemon reload.

## Why?

There was an issue with the daemon sending notifications, even if config
does not have the option turned on

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

dd1c231 chore(deps): update renovatebot/github-action action to v46.1.12 (#1189)

Floatpane Bot created

bcbf045 fix(sender): check writes in iMIP body (#1182)

Matt Van Horn created

df5e113 feat: custom keybindings (#1185)

Click to expand commit body
## What?


Adds customization to keybinds, as well as a safeguard saying if you
have keybinds binded to the same action

## Why?


Closes #399

---------

Signed-off-by: drew <me@andrinoff.com>
Co-authored-by: Lea <lea@floatpane.com>
Co-authored-by: Andriy Chernov <andriy@floatpane.com>

Drew Smirnoff , Lea , and Andriy Chernov created

7c91cb4 fix: handle zero terminal cell height (#1184)

Click to expand commit body
## What?

Added a check for `cellHeight == 0` in the `imageRows` function within
`view/html.go`. If the terminal height cannot be determined, it now
defaults to a standard `16px` fallback.

## Why?

When running in terminals that don't report cell size via `ioctl`,
`getTerminalCellSize()` returns `0`. This previously caused a "division
by zero" runtime panic during the row calculation for inline images: `(h
+ cellHeight - 1) / cellHeight`.

Closes #865

Mohamed Mahmoud created

0cba695 fix(cache): add log email cache errors (#1181)

Click to expand commit body
## What?

Added error handling and logging to email body caching operations in
`main.go`. Previously, `config.SaveEmailBody()` calls were ignoring
errors with `_`, now they capture and log failures for both synchronous
and asynchronous caching scenarios.


## Why?

Email body caching could fail silently due to disk full or permission
denied errors, making debugging difficult when users experienced missing
cached emails. This change adds visibility into caching failures to help
diagnose storage-related issues.

closes: #1030

JosΓ© Rafael Silva Hermoso created

b8f1930 chore(daemon): named timeout constants (#1027)

Click to expand commit body
## What?

Replaces ad-hoc `60*time.Second` and `30*time.Second` literals in
`daemon/handler.go` with two named constants and a brief comment
documenting the split, exactly as suggested in the issue body.

```go
const (
    fetchTimeout  = 60 * time.Second
    mutateTimeout = 30 * time.Second
)
```

`fetchTimeout` (was `60*time.Second`):
- `handleFetchEmails` (line 129)
- `handleFetchEmailBody` (line 154)
- async fetch inside `handleMarkRead` (line 318)

`mutateTimeout` (was `30*time.Second`):
- `handleDeleteEmails` (line 193)
- `handleArchiveEmails` (line 216)
- `handleMoveEmails` (line 239)
- `handleMarkRead` (line 262)
- `handleFetchFolders` (line 287)

## Why?

> `fetchTimeout` covers reads against the upstream IMAP provider, which
can return large bodies and so are given more headroom. `mutateTimeout`
covers state-changing operations and folder listings, which are bounded
by IMAP command latency rather than payload size.

If the maintainer wants `handleFetchFolders` reclassified to
`fetchTimeout` (which would be a behavior change from 30s to 60s), happy
to do that as a follow-up β€” kept it at the existing value here to keep
this purely a refactor.

Closes #985.

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>

Matt Van Horn and Matt Van Horn created

42f2417 perf: use slices instead of bubblesort (#1179)

Mohamed Mahmoud created

80625c7 ci: exclude preview from commit log (#1028)

Drew Smirnoff created

a29cd0a fix: cache migration error silent fail (#1005)

itniuma created

a70c07e chore: use strings.Builder in yubikey (#1024)

Mohamed Mahmoud created

39c1adf chore: update flake.lock (#1026)

Floatpane Bot created

100b75b fix: nil check in renderCalendarInvite (#1023)

Click to expand commit body
Co-authored-by: Ved Prakash <vedpra260@gmail.com>

Ved Prakash Arya and Ved Prakash created

b4b3dca feat: sixel fallback for multiplexers (#1011)

Drew Smirnoff created

4f33cb2 chore(deps): update renovatebot/github-action action to v46.1.11 (#1025)

Floatpane Bot created

db89465 refactor: extract shared HTTP timeouts (#1022)

Click to expand commit body
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>

Matt Van Horn and Matt Van Horn created

178a029 test(config): add folder_cache tests (#1007)

Matt Van Horn created

5f14523 fix: defer kitty debug-log Close (#909)

Sai Asish Y created

59bba11 ci: add /assign command (#1021)

Drew Smirnoff created

3d9d2cd docs: update demo.gif (#1017)

Floatpane Bot created

8e1a1fe chore: use strings.Builder in validator (#1020)

Mohamed Mahmoud created