@roman-16/proton-cli-win32-x64 2.3.0 → 2.4.1
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 +54 -52
- package/bin/{proton-cli.exe → proton.exe} +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ _Unofficial, community-built, not affiliated with Proton AG._
|
|
|
18
18
|
</div>
|
|
19
19
|
<br />
|
|
20
20
|
|
|
21
|
-
Read your mail, move files in and out of Drive, manage calendars, passwords, and contacts, all without opening a browser. proton
|
|
21
|
+
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
22
|
|
|
23
23
|
- **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
24
|
- **Five apps, one binary.** Mail, Drive, Calendar, Pass, and Contacts, in a single static executable on Linux, macOS, and Windows.
|
|
@@ -38,12 +38,14 @@ Read your mail, move files in and out of Drive, manage calendars, passwords, and
|
|
|
38
38
|
|
|
39
39
|
There's also an APT repository for Debian and Ubuntu, `.rpm` and `.apk` packages, plain binaries with checksums, and `go install`. See [Installation](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md).
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
The command is `proton`, and `proton-cli` works too - every install puts both names on your `PATH`.
|
|
42
|
+
|
|
43
|
+
Already installed? `proton update`.
|
|
42
44
|
|
|
43
45
|
## Get started
|
|
44
46
|
|
|
45
47
|
```console
|
|
46
|
-
$ proton
|
|
48
|
+
$ proton account login
|
|
47
49
|
Email: you@proton.me
|
|
48
50
|
Password:
|
|
49
51
|
Two-factor code: 123456
|
|
@@ -54,29 +56,29 @@ Two-factor code: 123456
|
|
|
54
56
|
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. Every command documents itself with `--help`:
|
|
55
57
|
|
|
56
58
|
```bash
|
|
57
|
-
proton
|
|
58
|
-
proton
|
|
59
|
+
proton mail messages list
|
|
60
|
+
proton mail messages send --help
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
Scripting it? `proton
|
|
63
|
+
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).
|
|
62
64
|
|
|
63
65
|
## What you can do
|
|
64
66
|
|
|
65
|
-
Every command reads the same way - `proton
|
|
67
|
+
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).
|
|
66
68
|
|
|
67
69
|
### Mail
|
|
68
70
|
|
|
69
71
|
```bash
|
|
70
|
-
proton
|
|
71
|
-
proton
|
|
72
|
-
proton
|
|
73
|
-
proton
|
|
74
|
-
proton
|
|
75
|
-
proton
|
|
76
|
-
proton
|
|
77
|
-
proton
|
|
78
|
-
proton
|
|
79
|
-
proton
|
|
72
|
+
proton mail messages list --unread
|
|
73
|
+
proton mail messages search --from billing@example.com --after 2026-01-01
|
|
74
|
+
proton mail messages get "Invoice #2291"
|
|
75
|
+
proton mail messages send --to alice@proton.me --subject Report --body "See attached." --attach ./report.pdf
|
|
76
|
+
proton mail messages reply "Invoice #2291" --body "Thanks, paid today."
|
|
77
|
+
proton mail messages forward "Invoice #2291" --to alice@proton.me
|
|
78
|
+
proton mail drafts create --to team@example.com --subject Standup --body "Notes to follow."
|
|
79
|
+
proton mail messages label "Invoice #2291" --label Accounting
|
|
80
|
+
proton mail messages export --folder archive --older-than 1y --output-dir ./backup
|
|
81
|
+
proton mail messages trash --unread --older-than 30d
|
|
80
82
|
```
|
|
81
83
|
|
|
82
84
|
Threads, attachments, filters, and auto-reply. → [Mail](https://github.com/roman-16/proton-cli/blob/main/docs/commands/mail.md)
|
|
@@ -84,13 +86,13 @@ Threads, attachments, filters, and auto-reply. → [Mail](https://github.com/rom
|
|
|
84
86
|
### Drive
|
|
85
87
|
|
|
86
88
|
```bash
|
|
87
|
-
proton
|
|
88
|
-
proton
|
|
89
|
-
proton
|
|
90
|
-
proton
|
|
91
|
-
proton
|
|
92
|
-
proton
|
|
93
|
-
proton
|
|
89
|
+
proton drive items list /Documents
|
|
90
|
+
proton drive items upload --recursive ./project /Backup
|
|
91
|
+
proton drive items upload --if-exists replace ./report.pdf /Documents
|
|
92
|
+
proton drive items download /Documents/report.pdf --output-dir .
|
|
93
|
+
proton drive items move /Documents/report.pdf --into /Archive
|
|
94
|
+
proton drive share link /Documents/report.pdf --expires 7d --password hunter2
|
|
95
|
+
proton drive items trash --pattern "*.tmp" --scope /Build --recursive
|
|
94
96
|
```
|
|
95
97
|
|
|
96
98
|
Revisions, sharing with people, and photo albums. → [Drive](https://github.com/roman-16/proton-cli/blob/main/docs/commands/drive.md)
|
|
@@ -98,12 +100,12 @@ Revisions, sharing with people, and photo albums. → [Drive](https://github.com
|
|
|
98
100
|
### Calendar
|
|
99
101
|
|
|
100
102
|
```bash
|
|
101
|
-
proton
|
|
102
|
-
proton
|
|
103
|
-
proton
|
|
104
|
-
proton
|
|
105
|
-
proton
|
|
106
|
-
proton
|
|
103
|
+
proton calendar events list --start 2026-04-15 --end 2026-04-30
|
|
104
|
+
proton calendar events create --title Dentist --start 2026-04-16T14:00 --duration 1h
|
|
105
|
+
proton calendar events create --title Standup --start 2026-04-16T09:00 --duration 15m --rrule "FREQ=WEEKLY;COUNT=10" --remind 15m
|
|
106
|
+
proton calendar events update 4f2a1b9c@2026-04-22T09:00 --start 2026-04-22T10:30
|
|
107
|
+
proton calendar events delete 4f2a1b9c@2026-05-04T09:00 --future
|
|
108
|
+
proton calendar events respond "Team sync" --status accept
|
|
107
109
|
```
|
|
108
110
|
|
|
109
111
|
Recurring events occurrence by occurrence, your own calendars, all-day events, and attendees. → [Calendar](https://github.com/roman-16/proton-cli/blob/main/docs/commands/calendar.md)
|
|
@@ -111,10 +113,10 @@ Recurring events occurrence by occurrence, your own calendars, all-day events, a
|
|
|
111
113
|
### Pass
|
|
112
114
|
|
|
113
115
|
```bash
|
|
114
|
-
proton
|
|
115
|
-
proton
|
|
116
|
-
proton
|
|
117
|
-
proton
|
|
116
|
+
proton pass items list --vault Work
|
|
117
|
+
proton pass items get github.com
|
|
118
|
+
proton pass items create --name GitHub --username roman --password "$(openssl rand -base64 24)" --url github.com
|
|
119
|
+
proton pass aliases create --prefix shop --mailbox me@proton.me
|
|
118
120
|
```
|
|
119
121
|
|
|
120
122
|
Notes, cards, SSH keys, and identities. → [Pass](https://github.com/roman-16/proton-cli/blob/main/docs/commands/pass.md)
|
|
@@ -122,10 +124,10 @@ Notes, cards, SSH keys, and identities. → [Pass](https://github.com/roman-16/p
|
|
|
122
124
|
### Contacts
|
|
123
125
|
|
|
124
126
|
```bash
|
|
125
|
-
proton
|
|
126
|
-
proton
|
|
127
|
-
proton
|
|
128
|
-
proton
|
|
127
|
+
proton contacts list
|
|
128
|
+
proton contacts create --name "Jane Roe" --email jane@example.com
|
|
129
|
+
proton contacts keys pin jane --key jane-pubkey.asc
|
|
130
|
+
proton contacts groups add GROUP_ID jane
|
|
129
131
|
```
|
|
130
132
|
|
|
131
133
|
Multiple addresses, organizations, and birthdays. → [Contacts](https://github.com/roman-16/proton-cli/blob/main/docs/commands/contacts.md)
|
|
@@ -133,34 +135,34 @@ Multiple addresses, organizations, and birthdays. → [Contacts](https://github.
|
|
|
133
135
|
### Account
|
|
134
136
|
|
|
135
137
|
```bash
|
|
136
|
-
proton
|
|
137
|
-
proton
|
|
138
|
-
proton
|
|
139
|
-
proton
|
|
138
|
+
proton account get
|
|
139
|
+
proton account sessions list
|
|
140
|
+
proton account settings set locale de_AT
|
|
141
|
+
proton account logout --revoke
|
|
140
142
|
```
|
|
141
143
|
|
|
142
144
|
Profiles and per-app settings. → [Account](https://github.com/roman-16/proton-cli/blob/main/docs/commands/account.md)
|
|
143
145
|
|
|
144
|
-
[`proton
|
|
146
|
+
[`proton api`](https://github.com/roman-16/proton-cli/blob/main/docs/commands/api.md) reaches any endpoint the commands don't.
|
|
145
147
|
|
|
146
148
|
## Automate it
|
|
147
149
|
|
|
148
150
|
```bash
|
|
149
151
|
# creating something prints its new ID to stdout
|
|
150
|
-
ID=$(proton
|
|
152
|
+
ID=$(proton mail settings labels create --name Work --color purple)
|
|
151
153
|
|
|
152
154
|
# every list is an envelope keyed by its plural name, always with a count
|
|
153
|
-
proton
|
|
154
|
-
proton
|
|
155
|
+
proton mail messages list --unread --output json | jq -r '.messages[].subject'
|
|
156
|
+
proton drive items list /Backup --output json | jq '[.items[].size] | add'
|
|
155
157
|
|
|
156
158
|
# stream through, no temporary files
|
|
157
|
-
pg_dump mydb | gzip | proton
|
|
159
|
+
pg_dump mydb | gzip | proton drive items upload - /Backups/db.sql.gz
|
|
158
160
|
|
|
159
161
|
# archive a folder to disk as ordinary .eml files
|
|
160
|
-
proton
|
|
162
|
+
proton mail messages export --folder archive --all --output-dir ./mail-backup
|
|
161
163
|
|
|
162
164
|
# check what a bulk change would touch before it happens
|
|
163
|
-
proton
|
|
165
|
+
proton mail messages trash --from newsletter@example.com --older-than 90d --dry-run
|
|
164
166
|
```
|
|
165
167
|
|
|
166
168
|
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 scripts can react to each. → [Scripting](https://github.com/roman-16/proton-cli/blob/main/docs/scripting.md)
|
|
@@ -171,7 +173,7 @@ Anything that removes permanently, or that removes what a filter picked out rath
|
|
|
171
173
|
|
|
172
174
|
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. Signatures on incoming mail are checked and reported.
|
|
173
175
|
|
|
174
|
-
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
|
|
176
|
+
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, and the whole storage model is written down in [Security](https://github.com/roman-16/proton-cli/blob/main/SECURITY.md). The mechanics are in [How it works](https://github.com/roman-16/proton-cli/blob/main/docs/how-it-works.md).
|
|
175
177
|
|
|
176
178
|
## Documentation
|
|
177
179
|
|
|
@@ -196,7 +198,7 @@ Everything lives in [`docs/`](https://github.com/roman-16/proton-cli/blob/main/d
|
|
|
196
198
|
|
|
197
199
|
- **Search lags a few seconds.** Proton's index is eventually consistent, so act on the ID a command printed rather than searching for the same subject again.
|
|
198
200
|
- **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).
|
|
199
|
-
- **
|
|
201
|
+
- **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.
|
|
200
202
|
- **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.
|
|
201
203
|
|
|
202
204
|
## Contributing
|
|
@@ -205,7 +207,7 @@ Bug reports, ideas, and pull requests are all welcome. [`CONTRIBUTING.md`](https
|
|
|
205
207
|
|
|
206
208
|
## Disclaimer
|
|
207
209
|
|
|
208
|
-
proton
|
|
210
|
+
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.
|
|
209
211
|
|
|
210
212
|
## License
|
|
211
213
|
|
|
Binary file
|