@roman-16/proton-cli-win32-x64 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -126
- package/bin/proton.exe +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
# proton-cli
|
|
6
6
|
|
|
7
|
-
**Proton,
|
|
7
|
+
**Your CLI for Proton Mail, Drive, Calendar, Pass and Contacts.**
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
_One binary, end-to-end encrypted. A community project, not affiliated with Proton AG._
|
|
10
10
|
|
|
11
11
|
[](https://github.com/roman-16/proton-cli/releases/latest) [](https://github.com/roman-16/proton-cli/releases) [](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md) [](https://github.com/roman-16/proton-cli/blob/main/LICENSE)
|
|
12
12
|
|
|
13
|
+
**[proton-cli.lerchster.dev](https://proton-cli.lerchster.dev)** - the documentation, searchable.
|
|
14
|
+
|
|
13
15
|
<picture>
|
|
14
16
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/roman-16/proton-cli/main/assets/demo-dark.svg">
|
|
15
17
|
<img src="https://raw.githubusercontent.com/roman-16/proton-cli/main/assets/demo-light.svg" alt="Listing unread mail, uploading a file to Drive, previewing which files a cleanup would remove, and listing Pass items">
|
|
@@ -18,40 +20,25 @@ _Unofficial, community-built, not affiliated with Proton AG._
|
|
|
18
20
|
</div>
|
|
19
21
|
<br />
|
|
20
22
|
|
|
21
|
-
Read your mail, move files in and out of Drive, manage calendars, passwords
|
|
23
|
+
Read your mail, move files in and out of Drive, manage calendars, passwords and contacts, all without opening a browser. proton logs in the way the Proton apps do and does the encryption on your machine, so your keys stay yours.
|
|
22
24
|
|
|
23
25
|
- **Real end-to-end encryption.** SRP login and the full PGP key hierarchy, handled locally with Proton's own [go-srp](https://github.com/ProtonMail/go-srp) and [gopenpgp](https://github.com/ProtonMail/gopenpgp). No bridge, no proxy, no browser in the middle.
|
|
24
|
-
- **Five apps, one binary.** Mail, Drive, Calendar, Pass
|
|
26
|
+
- **Five apps, one binary.** Mail, Drive, Calendar, Pass and Contacts, in a single static executable on Linux, macOS and Windows.
|
|
25
27
|
- **Built for pipes and cron.** JSON and YAML with one envelope shape for every list, streaming stdin and stdout, exit codes that mean something, and `--dry-run` on everything that changes state, showing the rows it would touch.
|
|
26
28
|
|
|
27
29
|
## Install
|
|
28
30
|
|
|
29
|
-
| Method | Command |
|
|
30
|
-
| --- | --- |
|
|
31
|
-
| **Linux, macOS** | `curl -fsSL https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.sh \| sh` |
|
|
32
|
-
| **Windows** | `irm https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.ps1 \| iex` |
|
|
33
|
-
| **Homebrew** | `brew install --cask roman-16/tap/proton-cli` |
|
|
34
|
-
| **winget** | `winget install Roman-16.ProtonCLI` |
|
|
35
|
-
| **Arch (AUR)** | `yay -S proton-cli-bin` |
|
|
36
|
-
| **Nix** | `pkgs.proton-cli` |
|
|
37
|
-
| **npm** | `npm install -g @roman-16/proton-cli` |
|
|
38
|
-
|
|
39
|
-
**Debian, Ubuntu, Linux Mint** - the APT repository, so it updates with the rest of your system:
|
|
40
|
-
|
|
41
31
|
```bash
|
|
42
|
-
|
|
43
|
-
curl -fsSL https://roman-16.github.io/proton-cli/gpg.key | sudo tee /etc/apt/keyrings/proton-cli.asc >/dev/null
|
|
44
|
-
echo "deb [signed-by=/etc/apt/keyrings/proton-cli.asc] https://roman-16.github.io/proton-cli stable main" | sudo tee /etc/apt/sources.list.d/proton-cli.list
|
|
45
|
-
sudo apt update && sudo apt install proton-cli
|
|
32
|
+
curl -fsSL https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.sh | sh
|
|
46
33
|
```
|
|
47
34
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
```powershell
|
|
36
|
+
irm https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.ps1 | iex
|
|
37
|
+
```
|
|
51
38
|
|
|
52
|
-
|
|
39
|
+
Also on Homebrew, winget, APT, AUR, Nix, npm, and as plain signed binaries - see [Install](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md). The command is `proton`, and `proton-cli` works too.
|
|
53
40
|
|
|
54
|
-
##
|
|
41
|
+
## Sixty seconds
|
|
55
42
|
|
|
56
43
|
```console
|
|
57
44
|
$ proton account login
|
|
@@ -62,86 +49,41 @@ Two-factor code: 123456
|
|
|
62
49
|
✓ Signed in as you@proton.me.
|
|
63
50
|
```
|
|
64
51
|
|
|
65
|
-
That's the whole setup
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
proton mail messages list
|
|
69
|
-
proton mail messages send --help
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Scripting it? `proton account login --user you@proton.me --password-file /run/secrets/proton` needs no terminal. Juggling a personal and a work account? `proton account login --profile work`. More in [Getting started](https://github.com/roman-16/proton-cli/blob/main/docs/getting-started.md).
|
|
73
|
-
|
|
74
|
-
## What you can do
|
|
75
|
-
|
|
76
|
-
Every command reads the same way - `proton <app> <collection> <verb>` - and anywhere one wants an ID, a subject, name, or URL works too. Lists shorten IDs to 8 characters you can paste straight back. See [The language](https://github.com/roman-16/proton-cli/blob/main/docs/language.md).
|
|
77
|
-
|
|
78
|
-
### Mail
|
|
52
|
+
That's the whole setup - signing in saves the session **and** unlocks your keys, so your password is needed once on this machine and not again.
|
|
79
53
|
|
|
80
54
|
```bash
|
|
81
55
|
proton mail messages list --unread
|
|
82
56
|
proton mail messages get "Invoice #2291"
|
|
83
|
-
proton
|
|
84
|
-
proton
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Threads, attachments, filters, snoozing, block and allow lists, and auto-reply. → [Mail](https://github.com/roman-16/proton-cli/blob/main/docs/commands/mail.md)
|
|
88
|
-
|
|
89
|
-
### Drive
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
proton drive items list /Documents
|
|
93
|
-
proton drive items upload --recursive ./project /Backup
|
|
94
|
-
proton drive items download /Documents/report.pdf --output-dir .
|
|
95
|
-
proton drive items share link /Documents/report.pdf --expires 7d
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Revisions, sharing with people, what others shared with you, and photo albums. → [Drive](https://github.com/roman-16/proton-cli/blob/main/docs/commands/drive.md)
|
|
99
|
-
|
|
100
|
-
### Calendar
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
proton calendar events list --start 2026-04-15 --end 2026-04-30
|
|
104
|
-
proton calendar events create --title Standup --start 2026-04-16T09:00 --duration 15m --rrule "FREQ=WEEKLY;COUNT=10" --remind 15m
|
|
105
|
-
proton calendar events respond "Team sync" --answer accept
|
|
106
|
-
proton calendar events export --start 2026-01-01 --end 2026-12-31 --output year.ics
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
Recurring events occurrence by occurrence, your own calendars, all-day events, attendees, and .ics in and out. → [Calendar](https://github.com/roman-16/proton-cli/blob/main/docs/commands/calendar.md)
|
|
110
|
-
|
|
111
|
-
### Pass
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
proton pass items list --vault Work
|
|
115
|
-
proton pass items get github.com
|
|
116
|
-
proton pass items create --name GitHub --username roman --url github.com --password "$(proton pass generate)"
|
|
57
|
+
proton drive items upload ./report.pdf /Documents
|
|
58
|
+
proton calendar events list
|
|
117
59
|
proton pass items totp github.com
|
|
118
60
|
```
|
|
119
61
|
|
|
120
|
-
|
|
62
|
+
Every command reads the same way - `proton <app> <collection> <verb>` - and anywhere one wants an ID, a subject, name, path, or address works too. → [Quickstart](https://github.com/roman-16/proton-cli/blob/main/docs/quickstart.md) · [How commands read](https://github.com/roman-16/proton-cli/blob/main/docs/language.md)
|
|
121
63
|
|
|
122
|
-
|
|
64
|
+
## What you can do
|
|
123
65
|
|
|
124
|
-
|
|
125
|
-
proton
|
|
126
|
-
proton
|
|
127
|
-
proton
|
|
128
|
-
proton
|
|
129
|
-
|
|
66
|
+
- **[Mail](https://github.com/roman-16/proton-cli/blob/main/docs/apps/mail.md)** - read, send, search and organize. Threads, attachments, filters, snoozing, block and allow lists, auto-reply.
|
|
67
|
+
- **[Drive](https://github.com/roman-16/proton-cli/blob/main/docs/apps/drive.md)** - files and folders as paths. Revisions, public links, sharing with people, trash, photo albums.
|
|
68
|
+
- **[Calendar](https://github.com/roman-16/proton-cli/blob/main/docs/apps/calendar.md)** - events and reminders. Recurrence occurrence by occurrence, attendees, invitations, .ics in and out.
|
|
69
|
+
- **[Pass](https://github.com/roman-16/proton-cli/blob/main/docs/apps/pass.md)** - logins and secrets. Notes, cards, SSH keys, identities, aliases, two-factor codes, item history.
|
|
70
|
+
- **[Contacts](https://github.com/roman-16/proton-cli/blob/main/docs/apps/contacts.md)** - your address book. Typed addresses and phones, the full vCard field set, duplicate merging.
|
|
71
|
+
- **[Account](https://github.com/roman-16/proton-cli/blob/main/docs/apps/account.md)** - signing in, sessions, and more than one account side by side.
|
|
130
72
|
|
|
131
|
-
|
|
73
|
+
[`proton api`](https://github.com/roman-16/proton-cli/blob/main/docs/apps/api.md) reaches any endpoint the commands don't. The [command reference](https://github.com/roman-16/proton-cli/blob/main/docs/commands/README.md) has every command, argument and flag.
|
|
132
74
|
|
|
133
|
-
|
|
75
|
+
## How it compares
|
|
134
76
|
|
|
135
|
-
|
|
136
|
-
proton account get
|
|
137
|
-
proton account sessions list
|
|
138
|
-
proton account settings set locale de_AT
|
|
139
|
-
proton account logout --revoke
|
|
140
|
-
```
|
|
77
|
+
Proton ships a CLI for Drive and one for Pass, and Bridge for mail in a desktop client. This is one binary across all five apps, with one grammar and one output shape.
|
|
141
78
|
|
|
142
|
-
|
|
79
|
+
| | Mail | Drive | Calendar | Pass | Contacts |
|
|
80
|
+
| --- | --- | --- | --- | --- | --- |
|
|
81
|
+
| **proton-cli** | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
82
|
+
| Proton Drive CLI | | ✓ | | | |
|
|
83
|
+
| Proton Pass CLI | | | | ✓ | |
|
|
84
|
+
| Proton Mail Bridge | IMAP/SMTP only | | | | |
|
|
143
85
|
|
|
144
|
-
|
|
86
|
+
Bridge is a background service your mail client talks to, and needs a paid plan. proton-cli is a command you run, on any plan. → [FAQ](https://github.com/roman-16/proton-cli/blob/main/docs/faq.md)
|
|
145
87
|
|
|
146
88
|
## Automate it
|
|
147
89
|
|
|
@@ -151,56 +93,27 @@ ID=$(proton mail settings labels create --name Work --color purple)
|
|
|
151
93
|
|
|
152
94
|
# every list is an envelope keyed by its plural name, always with a count
|
|
153
95
|
proton mail messages list --unread --output json | jq -r '.messages[].subject'
|
|
154
|
-
proton drive items list /Backup --output json | jq '[.items[].size] | add'
|
|
155
96
|
|
|
156
97
|
# stream through, no temporary files
|
|
157
98
|
pg_dump mydb | gzip | proton drive items upload - /Backups/db.sql.gz
|
|
158
99
|
|
|
159
|
-
# archive a folder to disk as ordinary .eml files
|
|
160
|
-
proton mail messages export --folder archive --all --output-dir ./mail-backup
|
|
161
|
-
|
|
162
|
-
# be told when things happen: arrivals and calendar reminders, live
|
|
163
|
-
proton mail messages watch --output json | jq --unbuffered -r '[.from_name,.subject]|@tsv'
|
|
164
|
-
|
|
165
100
|
# check what a bulk change would touch before it happens
|
|
166
101
|
proton mail messages trash --from newsletter@example.com --older-than 90d --dry-run
|
|
167
102
|
```
|
|
168
103
|
|
|
169
|
-
Data goes to stdout and progress to stderr, so redirects stay clean. Exit codes tell user error, auth failure, not-found, ambiguity, and network trouble apart, so
|
|
170
|
-
|
|
171
|
-
Anything that removes permanently, or that removes what a filter picked out rather than what you named, shows the rows and asks first. Off a terminal it refuses instead, so an unattended run fails safe until you add `--yes`. → [When it asks first](https://github.com/roman-16/proton-cli/blob/main/docs/language.md#when-it-asks-first)
|
|
104
|
+
Data goes to stdout and progress to stderr, so redirects stay clean. Exit codes tell user error, auth failure, not-found, ambiguity, and network trouble apart. Anything that removes permanently, or removes what a filter picked out rather than what you named, shows the rows and asks first - and off a terminal it refuses instead, so an unattended run fails safe until you add `--yes`. → [Scripting](https://github.com/roman-16/proton-cli/blob/main/docs/scripting.md)
|
|
172
105
|
|
|
173
106
|
## Encryption you can verify
|
|
174
107
|
|
|
175
|
-
Your password never reaches Proton: login is SRP, and the key password it derives stays local and unlocks your PGP keys in memory. Mail, files, events, contacts, and Pass items are decrypted after they arrive and encrypted before they leave, with the same key hierarchy the web clients use.
|
|
108
|
+
Your password never reaches Proton: login is SRP, and the key password it derives stays local and unlocks your PGP keys in memory. Mail, files, events, contacts, and Pass items are decrypted after they arrive and encrypted before they leave, with the same key hierarchy the web clients use.
|
|
176
109
|
|
|
177
|
-
The saved session keeps your key password encrypted with a key held server-side, so revoking the session from any Proton app makes a leaked copy of the file useless. proton is unaudited
|
|
110
|
+
The saved session keeps your key password encrypted with a key held server-side, so revoking the session from any Proton app makes a leaked copy of the file useless. proton-cli is unaudited; the whole model is written down in [Security and encryption](https://github.com/roman-16/proton-cli/blob/main/docs/how-it-works.md).
|
|
178
111
|
|
|
179
112
|
## Documentation
|
|
180
113
|
|
|
181
|
-
Everything
|
|
182
|
-
|
|
183
|
-
| Page | What's in it |
|
|
184
|
-
| --- | --- |
|
|
185
|
-
| [Installation](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md) | Every platform, updating, the update notice, uninstalling |
|
|
186
|
-
| [Configuration](https://github.com/roman-16/proton-cli/blob/main/docs/configuration.md) | Credentials, profiles, environment variables |
|
|
187
|
-
| [Getting started](https://github.com/roman-16/proton-cli/blob/main/docs/getting-started.md) | Signing in, completion, profiles |
|
|
188
|
-
| [The language](https://github.com/roman-16/proton-cli/blob/main/docs/language.md) | The grammar: apps, collections, verbs, filters |
|
|
189
|
-
| [Output](https://github.com/roman-16/proton-cli/blob/main/docs/output.md) | The four response kinds, JSON, colour, exit codes |
|
|
190
|
-
| [References](https://github.com/roman-16/proton-cli/blob/main/docs/references.md) | Names, short IDs, compound IDs |
|
|
191
|
-
| **Command reference** | [Everything](https://github.com/roman-16/proton-cli/blob/main/docs/commands/README.md) · [Mail](https://github.com/roman-16/proton-cli/blob/main/docs/commands/mail.md) · [Drive](https://github.com/roman-16/proton-cli/blob/main/docs/commands/drive.md) · [Calendar](https://github.com/roman-16/proton-cli/blob/main/docs/commands/calendar.md) · [Pass](https://github.com/roman-16/proton-cli/blob/main/docs/commands/pass.md) · [Contacts](https://github.com/roman-16/proton-cli/blob/main/docs/commands/contacts.md) · [Account](https://github.com/roman-16/proton-cli/blob/main/docs/commands/account.md) · [API](https://github.com/roman-16/proton-cli/blob/main/docs/commands/api.md) |
|
|
192
|
-
| [Scripting](https://github.com/roman-16/proton-cli/blob/main/docs/scripting.md) | Pipelines, `jq`, cron and systemd |
|
|
193
|
-
| [How it works](https://github.com/roman-16/proton-cli/blob/main/docs/how-it-works.md) | Login, keys, what's encrypted with what |
|
|
194
|
-
| [Limitations](https://github.com/roman-16/proton-cli/blob/main/docs/limitations.md) | Platform constraints and gaps |
|
|
195
|
-
|
|
196
|
-
[`CHANGELOG.md`](https://github.com/roman-16/proton-cli/blob/main/CHANGELOG.md) records what each version changed, and `proton changelog` prints it.
|
|
197
|
-
|
|
198
|
-
## Good to know
|
|
114
|
+
Everything is at **[proton-cli.lerchster.dev](https://proton-cli.lerchster.dev)** and in [`docs/`](https://github.com/roman-16/proton-cli/blob/main/docs/README.md) beside the code. Start with [Quickstart](https://github.com/roman-16/proton-cli/blob/main/docs/quickstart.md), reach for the [FAQ](https://github.com/roman-16/proton-cli/blob/main/docs/faq.md) when you wonder whether this is the right tool, and [Troubleshooting](https://github.com/roman-16/proton-cli/blob/main/docs/troubleshooting.md) when a command surprises you.
|
|
199
115
|
|
|
200
|
-
-
|
|
201
|
-
- **CAPTCHAs need a desktop.** Proton occasionally asks for human verification at login, which opens a small window. On a headless machine, log in elsewhere and copy the session. See [Human verification](https://github.com/roman-16/proton-cli/blob/main/docs/human-verification.md).
|
|
202
|
-
- **Label colors are Proton's; the interface's colors are yours.** Labels, folders, calendars, and groups accept only the 20 accent colors, by name (`--color purple`) or hex (`--color "#8080FF"`); an invalid `--color` prints the whole palette, and lists show the swatch and the name rather than a hex code. Everything proton colors on its own account it asks for by name, so the shades come from your terminal theme rather than from here.
|
|
203
|
-
- **Folders and labels are different.** A message lives in one folder and carries any number of labels, so `move --into` and `label --label` are separate verbs.
|
|
116
|
+
[`CHANGELOG.md`](https://github.com/roman-16/proton-cli/blob/main/CHANGELOG.md) records what each version changed, and `proton changelog` prints it. Already installed? `proton update`. An install no package manager owns says so itself, once a day.
|
|
204
117
|
|
|
205
118
|
## Contributing
|
|
206
119
|
|
|
@@ -208,7 +121,7 @@ Bug reports, ideas, and pull requests are all welcome. [`CONTRIBUTING.md`](https
|
|
|
208
121
|
|
|
209
122
|
## Disclaimer
|
|
210
123
|
|
|
211
|
-
proton is an independent, community-built project. It is not endorsed by, affiliated with, or supported by Proton AG. Proton is a trademark of Proton AG. Use it at your own risk, and mind Proton's terms of service.
|
|
124
|
+
proton-cli is an independent, community-built project. It is not endorsed by, affiliated with, or supported by Proton AG. Proton is a trademark of Proton AG. Use it at your own risk, and mind Proton's terms of service.
|
|
212
125
|
|
|
213
126
|
## License
|
|
214
127
|
|
package/bin/proton.exe
CHANGED
|
Binary file
|