The language
proton has one grammar. Learn it once and you can guess the rest.
proton <app> <collection> <verb> [TARGET…] [--flags]proton mail messages listproton drive items move /report.pdf --into /Archiveproton pass items get github.comproton calendar events create --title Standup --start 2026-04-16T09:00A group never does anything itself - proton mail settings prints help, proton mail settings get shows your settings. Every command that acts is named by a verb.
One word per idea, everywhere it appears.
| Verb | Means |
|---|---|
list · get |
show a collection, or one thing in full |
create · update · delete |
the usual three |
trash · restore · empty |
remove reversibly, put back, clear out |
move --into · copy --into |
put into another container |
upload · download |
move bytes to or from your disk |
export · import |
documents to or from disk |
send · reply · forward |
mail going out |
label · unlabel · star · unstar |
attach or detach |
enable · disable |
turn a thing on or off |
add · remove |
put a member into a container, or take one out |
accept · decline |
answer an invitation |
set |
write one setting |
login · logout |
your session |
To rename anything, use update --name. The command reference has the full list.
Saying which ones
Section titled “Saying which ones”Every command that can act on many things takes the same two ways of saying which: name them, or describe them. Both at once is a union.
proton mail messages trash 5bH2mQxK 9xL4pQrTproton mail messages trash --from newsletter@example.com --older-than 90dproton mail messages trash 5bH2mQxK --unread --folder spam| Filter | Means |
|---|---|
--folder · --scope · --vault |
where to look |
--older-than · --newer-than |
by age |
--larger-than · --smaller-than |
by size |
--pattern |
match the name against a glob |
--unread · --starred · --type |
by state or kind |
--all |
everything in scope, rather than a subset |
--limit |
cap how many a bulk verb affects |
list takes the same filters as the verbs beside it, so you can see a selection before acting on it:
proton drive items list /Build --pattern "*.tmp" --recursive # see what matchesproton drive items trash --scope /Build --pattern "*.tmp" --recursiveWhat list says with its PATH argument, a bulk verb says with --scope, because it uses its arguments to name things instead.
A command needs at least one reference or filter:
$ proton mail messages trashError: Nothing selected.Try: pass a REF, or a filter such as --unread, --starred, --from or --older-than. Use --all to target a whole folder.When it asks first
Section titled “When it asks first”proton asks before it removes something it cannot put back, and before it removes things you did not name. Nothing else ever stops to ask.
| you named it | a filter found it | |
|---|---|---|
delete · empty · uninstall |
asks | asks |
trash |
just does it | asks |
| everything else | just does it | just does it |
The question shows the things themselves, never a count:
$ proton mail messages delete --from newsletter@example.com --older-than 90dWould delete 3 messages:
ID FROM SUBJECT DATE──────── ──────────── ─────────────────── ────────────────hR8sT2vW Example News January round-up 2026-01-08 06:00kM4nP9qL Example News December round-up 2025-12-08 06:00zC7bX1yE Example News November round-up 2025-11-08 06:00
This cannot be undone. Continue? [y/N]Anything but a plain y means no, including pressing enter. (Why these two cases.)
In a script there is nobody to ask, so the question becomes an error and nothing is removed. --yes is the answer given in advance:
$ proton mail messages delete --folder spam --older-than 30dError: Would delete 112 messages. This cannot be undone.Try: --yes to confirm, or --dry-run to see what it would touch.Dry runs
Section titled “Dry runs”Every command that changes something takes --dry-run. It resolves references, applies filters, and shows you the things themselves:
$ proton mail messages trash --from newsletter@example.com --older-than 90d --dry-runDry run - would move 3 messages to trash:
ID FROM SUBJECT DATE──────── ──────────── ─────────────────── ────────────────hR8sT2vW Example News January round-up 2026-01-08 06:00kM4nP9qL Example News December round-up 2025-12-08 06:00zC7bX1yE Example News November round-up 2025-11-08 06:00Dry-run output goes to stderr, so it still appears if you redirect stdout.
Getting help
Section titled “Getting help”Every command documents itself, and completion knows the whole tree - including which values each constrained flag accepts.
proton --helpproton mail messages send --helpNext: naming the thing you want, and what comes back.