An account using a unique address per service, on a server with an alias domain, ends up with every local part twice over and a From picker nobody can use — while only ever sending from a handful.
Identities can now be hidden from that picker, from Identities & signatures. Hiding is presentation only: the identity still exists, still receives, and stays listed and editable — the way an unsubscribed folder is still a folder. That framing is mbunkus's own and it's the right one: this is a UI preference, not a change to the account.
Three things it refuses to do
A sender picker with nothing usable in it is worse than a cluttered one, so:
won't hide the identity a draft is already using — that would leave the select with no matching option and move the From line under the writer
won't hide the default, which is what a new draft starts on; the button is disabled there and the tooltip says why
if every identity is somehow hidden, they're all offered again. Only reachable via settings sync, since the UI won't do it — but a state that arrives from another device shouldn't produce an empty picker
The setting syncs, so the picker looks the same everywhere. That follows automatically from DEVICE_KEYS being a list of exceptions rather than a list of what travels.
The hidden address is gone from composing, the default's hide button is disabled, and the row states the identity still receives mail. Eight new tests cover the refusals specifically — including an id left behind by a deleted identity, which must not silently hide something else.
287 web + 77 server tests, typecheck and build clean.
Closes #73.
An account using a unique address per service, on a server with an alias domain, ends up with **every local part twice over** and a From picker nobody can use — while only ever sending from a handful.
Identities can now be hidden from that picker, from Identities & signatures. **Hiding is presentation only:** the identity still exists, still receives, and stays listed and editable — the way an unsubscribed folder is still a folder. That framing is mbunkus's own and it's the right one: this is a UI preference, not a change to the account.
## Three things it refuses to do
A sender picker with nothing usable in it is worse than a cluttered one, so:
- **won't hide the identity a draft is already using** — that would leave the select with no matching option and move the From line under the writer
- **won't hide the default**, which is what a new draft starts on; the button is disabled there and the tooltip says why
- **if every identity is somehow hidden**, they're all offered again. Only reachable via settings sync, since the UI won't do it — but a state that arrives from another device shouldn't produce an empty picker
The setting syncs, so the picker looks the same everywhere. That follows automatically from `DEVICE_KEYS` being a list of exceptions rather than a list of what travels.
## Verified against the mock
Four identities, one hidden:
```
hidden ["i1"] ([email protected])
offered Demo (alias) <alias@…>
Fourth <fourth@…>
Third <third@…>
```
The hidden address is gone from composing, the default's hide button is disabled, and the row states the identity still receives mail. Eight new tests cover the refusals specifically — including an id left behind by a deleted identity, which must not silently hide something else.
287 web + 77 server tests, typecheck and build clean.
**Merged** 2026-08-26 as coffey-labs/ihasmail@96ec790d5894
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #73.
An account using a unique address per service, on a server with an alias domain, ends up with every local part twice over and a From picker nobody can use — while only ever sending from a handful.
Identities can now be hidden from that picker, from Identities & signatures. Hiding is presentation only: the identity still exists, still receives, and stays listed and editable — the way an unsubscribed folder is still a folder. That framing is mbunkus's own and it's the right one: this is a UI preference, not a change to the account.
Three things it refuses to do
A sender picker with nothing usable in it is worse than a cluttered one, so:
The setting syncs, so the picker looks the same everywhere. That follows automatically from
DEVICE_KEYSbeing a list of exceptions rather than a list of what travels.Verified against the mock
Four identities, one hidden:
The hidden address is gone from composing, the default's hide button is disabled, and the row states the identity still receives mail. Eight new tests cover the refusals specifically — including an id left behind by a deleted identity, which must not silently hide something else.
287 web + 77 server tests, typecheck and build clean.
Merged 2026-08-26 as coffey-labs/ihasmail@96ec790d58
Rebuilt from: git history, session transcript.