You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Feature]: A cleaner composer header, and an Attach sheet with icons and clearer names #137
Two small things in the composer make it look less finished than the rest of the app:
The header of a new message reads "New Message". The empty From, To and Subject fields right below already say what the screen is, so the title repeats them and adds clutter to the header.
On a server with Files, the Attach sheet has two options that read like the same thing: "Upload from this device" and "Attach from Files". On a phone, "Files" is also the name of the system file app, so it isn't clear that the second one means the user's Files on the mail server. The rows are also plain text, while other sheets in the app (the attachment actions in a message, for example) show an icon on each row.
Proposed Solution
A new message has no header title. Reply, Reply All and Forward keep theirs, since those tell you something, and the draft status line under the title still shows.
Icons on the Attach sheet rows, sized and coloured like the attachment action sheet: image, camera, phone, folder (the folder icon is the one "Save to Files" already uses).
Names that tell the sources apart: Gallery, Camera, This device, Bulwark Files.
"This device" opens the system file picker, and "Bulwark Files" opens the Files picker.
Without server Files, the third row reads "This device" too, so the label doesn't change with the server.
On iOS the first row keeps "Photos & Videos", since iOS calls its library Photos.
The three new strings would be app-only keys in locales/rn, in every locale. "This device" and "Files" can reuse the webmail's existing translations. A PR with this is coming shortly.
Alternatives Considered
Merging "Upload from this device" and "Attach from Files" into one option: that would drop attaching from server Files, which the webmail has ([Feature]: Attach items from files webmail#1179), so it is not an option.
Keeping the current labels and adding icons only: the icons help, but "Attach from Files" next to a phone's own Files app still reads as the same thing.
Feature Area
Email
Mockups / Examples
The sheet would read, top to bottom: Gallery, Camera, This device, Bulwark Files, Cancel, each row with its icon on the left. Screenshots from a device build will be in the PR.
Additional Context
The header change is for new messages only, including a draft reopened from Drafts, which also showed "New Message" until now.
One thing for the PR: the Maestro flows use the "New Message" title as their sign that the composer is open, so removing it means giving them another anchor.
The same compose flow checks the Attach sheet labels: it waits for "Photos & Videos", then asserts "Camera" and "Upload from this device|Files" (lines 30-37). Those need to match the new names.
For the icons, the Attach sheet is built from the composer's own SheetOption, which has only label, destructive and onPress (ComposeScreen.tsx#L324-L328). The email ActionSheetItem already has an icon?: React.ReactNode (ActionSheet.tsx#L12-L20). The current labels and the hasServerFiles switch are in ComposeScreen.tsx#L2150-L2165.
Bulwark Warden is an AI assistant and can be wrong. It answers from the docs, the code and earlier issues, and links its sources.
Shipped in #138. A new message no longer has a title in the header (Reply, Reply All and Forward keep theirs), and the Attach sheet has an icon on each row. The rows are now Gallery (Photos & Videos on iOS), Camera, This device and Bulwark Files.
Activity
bulwark-warden commentedon Nov 13, 2026
One thing for the PR: the Maestro flows use the "New Message" title as their sign that the composer is open, so removing it means giving them another anchor.
.maestro/features/03-compose-send.yamlwaits for "New Message" after tapping Compose. It waits for it again after the photo picker closes, and usesnotVisible: "Draft saved|New Message"while the picker is open..maestro/features/08-scheduled-send.yamland.maestro/perf/3-compose.yamlalso wait for "New Message" after Compose."Upload from this device|Files"(lines 30-37). Those need to match the new names.For the icons, the Attach sheet is built from the composer's own
SheetOption, which has onlylabel,destructiveandonPress(ComposeScreen.tsx#L324-L328). The emailActionSheetItemalready has anicon?: React.ReactNode(ActionSheet.tsx#L12-L20). The current labels and thehasServerFilesswitch are in ComposeScreen.tsx#L2150-L2165.Bulwark Warden is an AI assistant and can be wrong. It answers from the docs, the code and earlier issues, and links its sources.
test: the Maestro flows wait for the composer by id, not its title bu…
fix: screen readers name the untitled composer, and "Bulwark Files" r…
screenshots for bulwarkmail#137
fix: name the attach sheet's rows in greek, nynorsk and vietnamese too …
rathlinus commentedon Nov 15, 2026
Shipped in #138. A new message no longer has a title in the header (Reply, Reply All and Forward keep theirs), and the Attach sheet has an icon on each row. The rows are now Gallery (Photos & Videos on iOS), Camera, This device and Bulwark Files.