@roman-16/proton-cli-win32-x64 1.10.0 → 2.0.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 +58 -38
- package/bin/proton-cli.exe +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,27 +8,25 @@
|
|
|
8
8
|
|
|
9
9
|
_Unofficial, community-built, not affiliated with Proton AG._
|
|
10
10
|
|
|
11
|
-
[](https://github.com/roman-16/proton-cli/releases/latest)
|
|
12
|
-
[](https://github.com/roman-16/proton-cli/releases)
|
|
13
|
-
[](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md)
|
|
14
|
-
[](https://github.com/roman-16/proton-cli/blob/main/LICENSE)
|
|
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)
|
|
15
12
|
|
|
16
13
|
<picture>
|
|
17
14
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/roman-16/proton-cli/main/assets/demo-dark.svg">
|
|
18
|
-
<img src="https://raw.githubusercontent.com/roman-16/proton-cli/main/assets/demo-light.svg" alt="Listing unread mail,
|
|
15
|
+
<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">
|
|
19
16
|
</picture>
|
|
20
17
|
|
|
21
18
|
</div>
|
|
19
|
+
<br />
|
|
22
20
|
|
|
23
21
|
Read your mail, move files in and out of Drive, manage calendars, passwords, and contacts, all without opening a browser. proton-cli logs in the way the Proton apps do and does the encryption on your machine, so your keys stay yours.
|
|
24
22
|
|
|
25
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.
|
|
26
24
|
- **Five apps, one binary.** Mail, Drive, Calendar, Pass, and Contacts, in a single static executable on Linux, macOS, and Windows.
|
|
27
|
-
- **Built for pipes and cron.** JSON and YAML
|
|
25
|
+
- **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.
|
|
28
26
|
|
|
29
27
|
## Install
|
|
30
28
|
|
|
31
|
-
| | |
|
|
29
|
+
| Method | Command |
|
|
32
30
|
| --- | --- |
|
|
33
31
|
| **Linux, macOS** | `curl -fsSL https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.sh \| sh` |
|
|
34
32
|
| **Windows** | `irm https://raw.githubusercontent.com/roman-16/proton-cli/main/scripts/install.ps1 \| iex` |
|
|
@@ -44,40 +42,44 @@ Already installed? `proton-cli update`.
|
|
|
44
42
|
|
|
45
43
|
## Get started
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
```console
|
|
46
|
+
$ proton-cli account login
|
|
47
|
+
Email: you@proton.me
|
|
48
|
+
Password:
|
|
49
|
+
Two-factor code: 123456
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
export PROTON_USER=you@proton.me
|
|
51
|
-
export PROTON_PASSWORD='your-password'
|
|
52
|
-
# export PROTON_TOTP=123456 # only if two-factor is enabled
|
|
51
|
+
✓ Signed in as you@proton.me.
|
|
53
52
|
```
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
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`:
|
|
56
55
|
|
|
57
56
|
```bash
|
|
58
57
|
proton-cli mail messages list
|
|
58
|
+
proton-cli mail messages send --help
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
Prefer the environment? `PROTON_USER` and `PROTON_PASSWORD` are used instead of being asked for. Juggling a personal and a work account? `proton-cli --profile work account login`. More in [Getting started](https://github.com/roman-16/proton-cli/blob/main/docs/getting-started.md).
|
|
62
62
|
|
|
63
63
|
## What you can do
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
Every command reads the same way - `proton-cli <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
66
|
|
|
67
67
|
### Mail
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
proton-cli mail messages list --unread
|
|
71
71
|
proton-cli mail messages search --from billing@example.com --after 2026-01-01
|
|
72
|
-
proton-cli mail messages
|
|
73
|
-
proton-cli mail messages send --to alice@proton.me --subject Report
|
|
74
|
-
|
|
75
|
-
proton-cli mail messages
|
|
76
|
-
|
|
72
|
+
proton-cli mail messages get "Invoice #2291"
|
|
73
|
+
proton-cli mail messages send --to alice@proton.me --subject Report --body "See attached." --attach ./report.pdf
|
|
74
|
+
proton-cli mail messages reply "Invoice #2291" --body "Thanks, paid today."
|
|
75
|
+
proton-cli mail messages forward "Invoice #2291" --to alice@proton.me
|
|
76
|
+
proton-cli mail drafts create --to team@example.com --subject Standup --body "Notes to follow."
|
|
77
|
+
proton-cli mail messages label "Invoice #2291" --label Accounting
|
|
78
|
+
proton-cli mail messages export --folder archive --older-than 1y --output-dir ./backup
|
|
77
79
|
proton-cli mail messages trash --unread --older-than 30d
|
|
78
80
|
```
|
|
79
81
|
|
|
80
|
-
Threads, attachments,
|
|
82
|
+
Threads, attachments, filters, and auto-reply. → [Mail](https://github.com/roman-16/proton-cli/blob/main/docs/commands/mail.md)
|
|
81
83
|
|
|
82
84
|
### Drive
|
|
83
85
|
|
|
@@ -85,61 +87,75 @@ Threads, attachments, labels, folders, and Sieve filters too. → [Mail](https:/
|
|
|
85
87
|
proton-cli drive items list /Documents
|
|
86
88
|
proton-cli drive items upload --recursive ./project /Backup
|
|
87
89
|
proton-cli drive items download /Documents/report.pdf --output-dir .
|
|
90
|
+
proton-cli drive items move /Documents/report.pdf --into /Archive
|
|
88
91
|
proton-cli drive share link /Documents/report.pdf --expires 7d --password hunter2
|
|
89
92
|
proton-cli drive items trash --pattern "*.tmp" --scope /Build --recursive
|
|
90
93
|
```
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
Revisions, sharing with people, and photo albums. → [Drive](https://github.com/roman-16/proton-cli/blob/main/docs/commands/drive.md)
|
|
93
96
|
|
|
94
97
|
### Calendar
|
|
95
98
|
|
|
96
99
|
```bash
|
|
97
100
|
proton-cli calendar events list --start 2026-04-15 --end 2026-04-30
|
|
98
101
|
proton-cli calendar events create --title Dentist --start 2026-04-16T14:00 --duration 1h
|
|
99
|
-
proton-cli calendar events create --title Standup --start 2026-04-16T09:00
|
|
100
|
-
--duration 15m --rrule "FREQ=WEEKLY;COUNT=10" --remind 15m
|
|
102
|
+
proton-cli calendar events create --title Standup --start 2026-04-16T09:00 --duration 15m --rrule "FREQ=WEEKLY;COUNT=10" --remind 15m
|
|
101
103
|
proton-cli calendar events respond "Team sync" --status accept
|
|
102
104
|
```
|
|
103
105
|
|
|
104
|
-
→ [Calendar](https://github.com/roman-16/proton-cli/blob/main/docs/commands/calendar.md)
|
|
106
|
+
Your own calendars, all-day events, and attendees. → [Calendar](https://github.com/roman-16/proton-cli/blob/main/docs/commands/calendar.md)
|
|
105
107
|
|
|
106
108
|
### Pass
|
|
107
109
|
|
|
108
110
|
```bash
|
|
109
111
|
proton-cli pass items list --vault Work
|
|
110
112
|
proton-cli pass items get github.com
|
|
111
|
-
proton-cli pass items create --name GitHub --username roman
|
|
112
|
-
|
|
113
|
-
proton-cli pass alias create --prefix shop --mailbox me@proton.me
|
|
113
|
+
proton-cli pass items create --name GitHub --username roman --password "$(openssl rand -base64 24)" --url github.com
|
|
114
|
+
proton-cli pass aliases create --prefix shop --mailbox me@proton.me
|
|
114
115
|
```
|
|
115
116
|
|
|
116
|
-
|
|
117
|
+
Notes, cards, SSH keys, and identities. → [Pass](https://github.com/roman-16/proton-cli/blob/main/docs/commands/pass.md)
|
|
117
118
|
|
|
118
119
|
### Contacts
|
|
119
120
|
|
|
120
121
|
```bash
|
|
121
122
|
proton-cli contacts list
|
|
122
123
|
proton-cli contacts create --name "Jane Roe" --email jane@example.com
|
|
123
|
-
proton-cli contacts pin
|
|
124
|
+
proton-cli contacts keys pin jane --key jane-pubkey.asc
|
|
124
125
|
proton-cli contacts groups add GROUP_ID jane
|
|
125
126
|
```
|
|
126
127
|
|
|
127
|
-
→ [Contacts](https://github.com/roman-16/proton-cli/blob/main/docs/commands/contacts.md)
|
|
128
|
+
Multiple addresses, organizations, and birthdays. → [Contacts](https://github.com/roman-16/proton-cli/blob/main/docs/commands/contacts.md)
|
|
129
|
+
|
|
130
|
+
### Account
|
|
128
131
|
|
|
129
|
-
|
|
132
|
+
```bash
|
|
133
|
+
proton-cli account get
|
|
134
|
+
proton-cli account sessions list
|
|
135
|
+
proton-cli account settings set locale de_AT
|
|
136
|
+
proton-cli account logout --revoke
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Profiles and per-app settings. → [Account](https://github.com/roman-16/proton-cli/blob/main/docs/commands/account.md)
|
|
140
|
+
|
|
141
|
+
[`proton-cli api`](https://github.com/roman-16/proton-cli/blob/main/docs/commands/api.md) reaches any endpoint the commands don't.
|
|
130
142
|
|
|
131
143
|
## Automate it
|
|
132
144
|
|
|
133
145
|
```bash
|
|
134
146
|
# creating something prints its new ID to stdout
|
|
135
|
-
ID=$(proton-cli mail labels create --name Work --color "#8080FF")
|
|
147
|
+
ID=$(proton-cli mail settings labels create --name Work --color "#8080FF")
|
|
136
148
|
|
|
137
|
-
#
|
|
149
|
+
# every list is an envelope keyed by its plural name, always with a count
|
|
138
150
|
proton-cli mail messages list --unread --output json | jq -r '.messages[].subject'
|
|
151
|
+
proton-cli drive items list /Backup --output json | jq '[.items[].size] | add'
|
|
139
152
|
|
|
140
153
|
# stream through, no temporary files
|
|
141
154
|
pg_dump mydb | gzip | proton-cli drive items upload - /Backups/db.sql.gz
|
|
142
155
|
|
|
156
|
+
# archive a folder to disk as ordinary .eml files
|
|
157
|
+
proton-cli mail messages export --folder archive --all --output-dir ./mail-backup
|
|
158
|
+
|
|
143
159
|
# check what a bulk change would touch before it happens
|
|
144
160
|
proton-cli mail messages trash --from newsletter@example.com --older-than 90d --dry-run
|
|
145
161
|
```
|
|
@@ -156,12 +172,15 @@ The saved session keeps your key password encrypted with a key held server-side,
|
|
|
156
172
|
|
|
157
173
|
Everything lives in [`docs/`](https://github.com/roman-16/proton-cli/blob/main/docs/README.md):
|
|
158
174
|
|
|
159
|
-
| | |
|
|
175
|
+
| Page | What's in it |
|
|
160
176
|
| --- | --- |
|
|
161
177
|
| [Installation](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md) | Every platform, updating, uninstalling |
|
|
162
178
|
| [Configuration](https://github.com/roman-16/proton-cli/blob/main/docs/configuration.md) | Credentials, profiles, environment variables |
|
|
163
|
-
| [
|
|
164
|
-
|
|
|
179
|
+
| [Getting started](https://github.com/roman-16/proton-cli/blob/main/docs/getting-started.md) | Signing in, completion, profiles |
|
|
180
|
+
| [The language](https://github.com/roman-16/proton-cli/blob/main/docs/language.md) | The grammar: apps, collections, verbs, filters |
|
|
181
|
+
| [Output](https://github.com/roman-16/proton-cli/blob/main/docs/output.md) | The four response kinds, JSON, colour, exit codes |
|
|
182
|
+
| [References](https://github.com/roman-16/proton-cli/blob/main/docs/references.md) | Names, short IDs, compound IDs |
|
|
183
|
+
| **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) |
|
|
165
184
|
| [Scripting](https://github.com/roman-16/proton-cli/blob/main/docs/scripting.md) | Pipelines, `jq`, cron and systemd |
|
|
166
185
|
| [How it works](https://github.com/roman-16/proton-cli/blob/main/docs/how-it-works.md) | Login, keys, what's encrypted with what |
|
|
167
186
|
| [Limitations](https://github.com/roman-16/proton-cli/blob/main/docs/limitations.md) | Platform constraints and gaps |
|
|
@@ -170,7 +189,8 @@ Everything lives in [`docs/`](https://github.com/roman-16/proton-cli/blob/main/d
|
|
|
170
189
|
|
|
171
190
|
- **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.
|
|
172
191
|
- **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).
|
|
173
|
-
- **Colors are Proton's.** Labels, folders, calendars, and groups accept only the 20 accent colors; an invalid `--color` prints the
|
|
192
|
+
- **Colors are Proton's.** Labels, folders, calendars, and groups accept only the 20 accent colors; an invalid `--color` prints the whole palette.
|
|
193
|
+
- **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.
|
|
174
194
|
|
|
175
195
|
## Contributing
|
|
176
196
|
|
package/bin/proton-cli.exe
CHANGED
|
Binary file
|