@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 CHANGED
@@ -8,27 +8,25 @@
8
8
 
9
9
  _Unofficial, community-built, not affiliated with Proton AG._
10
10
 
11
- [![Release](https://img.shields.io/github/v/release/roman-16/proton-cli?sort=semver&style=flat-square&color=6D4AFF)](https://github.com/roman-16/proton-cli/releases/latest)
12
- [![Downloads](https://img.shields.io/github/downloads/roman-16/proton-cli/total?style=flat-square&color=6D4AFF)](https://github.com/roman-16/proton-cli/releases)
13
- [![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-6D4AFF?style=flat-square)](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md)
14
- [![License](https://img.shields.io/github/license/roman-16/proton-cli?style=flat-square&color=6D4AFF)](https://github.com/roman-16/proton-cli/blob/main/LICENSE)
11
+ [![Release](https://img.shields.io/github/v/release/roman-16/proton-cli?sort=semver&style=flat-square&color=6D4AFF)](https://github.com/roman-16/proton-cli/releases/latest) [![Downloads](https://img.shields.io/github/downloads/roman-16/proton-cli/total?style=flat-square&color=6D4AFF)](https://github.com/roman-16/proton-cli/releases) [![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-6D4AFF?style=flat-square)](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md) [![License](https://img.shields.io/github/license/roman-16/proton-cli?style=flat-square&color=6D4AFF)](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, sending a message with an attachment, and uploading a file to Drive">
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 output, streaming stdin and stdout, exit codes that mean something, and `--dry-run` on everything that changes state.
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
- Point it at your account:
45
+ ```console
46
+ $ proton-cli account login
47
+ Email: you@proton.me
48
+ Password:
49
+ Two-factor code: 123456
48
50
 
49
- ```bash
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
- Then use it:
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
- That's the whole setup. The session is saved after the first login, so later commands don't ask again, and every command documents itself with `--help`. Juggling a personal and a work account? Add `--profile work`. More in [Configuration](https://github.com/roman-16/proton-cli/blob/main/docs/configuration.md).
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
- Anywhere a command wants an ID, a subject, name, or URL works too, and lists shorten IDs to 8 characters you can paste straight back. See [Concepts](https://github.com/roman-16/proton-cli/blob/main/docs/concepts.md).
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 read "Invoice #2291"
73
- proton-cli mail messages send --to alice@proton.me --subject Report \
74
- --body "See attached." --attach ./report.pdf
75
- proton-cli mail messages send --to team@example.com --subject Standup \
76
- --body "Same time tomorrow." --send-at 2026-05-01T09:00
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, labels, folders, and Sieve filters too. → [Mail](https://github.com/roman-16/proton-cli/blob/main/docs/commands/mail.md)
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
- Plus revisions, sharing with people, trash, and photo albums. → [Drive](https://github.com/roman-16/proton-cli/blob/main/docs/commands/drive.md)
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
- --password "$(openssl rand -base64 24)" --url github.com
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
- Logins, notes, cards, Wi-Fi, SSH keys, identities, custom items. → [Pass](https://github.com/roman-16/proton-cli/blob/main/docs/commands/pass.md)
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-key jane --key jane-pubkey.asc
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
- Account and mail [settings](https://github.com/roman-16/proton-cli/blob/main/docs/commands/settings.md) are covered as well, and [`proton-cli api`](https://github.com/roman-16/proton-cli/blob/main/docs/commands/api.md) reaches any endpoint the commands don't.
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
- # JSON for the machines, always with full IDs
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
- | [Concepts](https://github.com/roman-16/proton-cli/blob/main/docs/concepts.md) | References, short IDs, output, exit codes, dry runs |
164
- | **Command reference** | [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) · [Settings](https://github.com/roman-16/proton-cli/blob/main/docs/commands/settings.md) · [API](https://github.com/roman-16/proton-cli/blob/main/docs/commands/api.md) |
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 valid ones.
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
 
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roman-16/proton-cli-win32-x64",
3
- "version": "1.10.0",
3
+ "version": "2.0.0",
4
4
  "description": "proton-cli native binary for win32-x64",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/roman-16/proton-cli",