@roman-16/proton-cli-win32-arm64 2.5.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/LICENSE +21 -0
- package/README.md +214 -0
- package/bin/proton.exe +0 -0
- package/package.json +21 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Roman
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://raw.githubusercontent.com/roman-16/proton-cli/main/assets/logo.svg" width="96" height="96" alt="">
|
|
4
|
+
|
|
5
|
+
# proton-cli
|
|
6
|
+
|
|
7
|
+
**Proton, in your terminal.**
|
|
8
|
+
|
|
9
|
+
_Unofficial, community-built, not affiliated with Proton AG._
|
|
10
|
+
|
|
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
|
+
|
|
13
|
+
<picture>
|
|
14
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/roman-16/proton-cli/main/assets/demo-dark.svg">
|
|
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">
|
|
16
|
+
</picture>
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
<br />
|
|
20
|
+
|
|
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
|
+
|
|
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
|
+
- **Five apps, one binary.** Mail, Drive, Calendar, Pass, and Contacts, in a single static executable on Linux, macOS, and Windows.
|
|
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.
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
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
|
+
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
|
+
|
|
41
|
+
The command is `proton`, and `proton-cli` works too - every install puts both names on your `PATH`.
|
|
42
|
+
|
|
43
|
+
Already installed? `proton update`, and `proton changelog` for what that brings. An install no package manager owns says so itself, once a day.
|
|
44
|
+
|
|
45
|
+
## Get started
|
|
46
|
+
|
|
47
|
+
```console
|
|
48
|
+
$ proton account login
|
|
49
|
+
Email: you@proton.me
|
|
50
|
+
Password:
|
|
51
|
+
Two-factor code: 123456
|
|
52
|
+
|
|
53
|
+
✓ Signed in as you@proton.me.
|
|
54
|
+
```
|
|
55
|
+
|
|
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`:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
proton mail messages list
|
|
60
|
+
proton mail messages send --help
|
|
61
|
+
```
|
|
62
|
+
|
|
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).
|
|
64
|
+
|
|
65
|
+
## What you can do
|
|
66
|
+
|
|
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).
|
|
68
|
+
|
|
69
|
+
### Mail
|
|
70
|
+
|
|
71
|
+
```bash
|
|
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
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Threads, attachments, filters, and auto-reply. → [Mail](https://github.com/roman-16/proton-cli/blob/main/docs/commands/mail.md)
|
|
85
|
+
|
|
86
|
+
### Drive
|
|
87
|
+
|
|
88
|
+
```bash
|
|
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
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Revisions, sharing with people, 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 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
|
|
109
|
+
```
|
|
110
|
+
|
|
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)
|
|
112
|
+
|
|
113
|
+
### Pass
|
|
114
|
+
|
|
115
|
+
```bash
|
|
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
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Notes, cards, SSH keys, and identities. → [Pass](https://github.com/roman-16/proton-cli/blob/main/docs/commands/pass.md)
|
|
123
|
+
|
|
124
|
+
### Contacts
|
|
125
|
+
|
|
126
|
+
```bash
|
|
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
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Multiple addresses, organizations, and birthdays. → [Contacts](https://github.com/roman-16/proton-cli/blob/main/docs/commands/contacts.md)
|
|
134
|
+
|
|
135
|
+
### Account
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
proton account get
|
|
139
|
+
proton account sessions list
|
|
140
|
+
proton account settings set locale de_AT
|
|
141
|
+
proton account logout --revoke
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Profiles and per-app settings. → [Account](https://github.com/roman-16/proton-cli/blob/main/docs/commands/account.md)
|
|
145
|
+
|
|
146
|
+
[`proton api`](https://github.com/roman-16/proton-cli/blob/main/docs/commands/api.md) reaches any endpoint the commands don't.
|
|
147
|
+
|
|
148
|
+
## Automate it
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# creating something prints its new ID to stdout
|
|
152
|
+
ID=$(proton mail settings labels create --name Work --color purple)
|
|
153
|
+
|
|
154
|
+
# every list is an envelope keyed by its plural name, always with a count
|
|
155
|
+
proton mail messages list --unread --output json | jq -r '.messages[].subject'
|
|
156
|
+
proton drive items list /Backup --output json | jq '[.items[].size] | add'
|
|
157
|
+
|
|
158
|
+
# stream through, no temporary files
|
|
159
|
+
pg_dump mydb | gzip | proton drive items upload - /Backups/db.sql.gz
|
|
160
|
+
|
|
161
|
+
# archive a folder to disk as ordinary .eml files
|
|
162
|
+
proton mail messages export --folder archive --all --output-dir ./mail-backup
|
|
163
|
+
|
|
164
|
+
# check what a bulk change would touch before it happens
|
|
165
|
+
proton mail messages trash --from newsletter@example.com --older-than 90d --dry-run
|
|
166
|
+
```
|
|
167
|
+
|
|
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)
|
|
169
|
+
|
|
170
|
+
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)
|
|
171
|
+
|
|
172
|
+
## Encryption you can verify
|
|
173
|
+
|
|
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.
|
|
175
|
+
|
|
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).
|
|
177
|
+
|
|
178
|
+
## Documentation
|
|
179
|
+
|
|
180
|
+
Everything lives in [`docs/`](https://github.com/roman-16/proton-cli/blob/main/docs/README.md):
|
|
181
|
+
|
|
182
|
+
| Page | What's in it |
|
|
183
|
+
| --- | --- |
|
|
184
|
+
| [Installation](https://github.com/roman-16/proton-cli/blob/main/docs/installation.md) | Every platform, updating, the update notice, uninstalling |
|
|
185
|
+
| [Configuration](https://github.com/roman-16/proton-cli/blob/main/docs/configuration.md) | Credentials, profiles, environment variables |
|
|
186
|
+
| [Getting started](https://github.com/roman-16/proton-cli/blob/main/docs/getting-started.md) | Signing in, completion, profiles |
|
|
187
|
+
| [The language](https://github.com/roman-16/proton-cli/blob/main/docs/language.md) | The grammar: apps, collections, verbs, filters |
|
|
188
|
+
| [Output](https://github.com/roman-16/proton-cli/blob/main/docs/output.md) | The four response kinds, JSON, colour, exit codes |
|
|
189
|
+
| [References](https://github.com/roman-16/proton-cli/blob/main/docs/references.md) | Names, short IDs, compound IDs |
|
|
190
|
+
| **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) |
|
|
191
|
+
| [Scripting](https://github.com/roman-16/proton-cli/blob/main/docs/scripting.md) | Pipelines, `jq`, cron and systemd |
|
|
192
|
+
| [How it works](https://github.com/roman-16/proton-cli/blob/main/docs/how-it-works.md) | Login, keys, what's encrypted with what |
|
|
193
|
+
| [Limitations](https://github.com/roman-16/proton-cli/blob/main/docs/limitations.md) | Platform constraints and gaps |
|
|
194
|
+
|
|
195
|
+
[`CHANGELOG.md`](https://github.com/roman-16/proton-cli/blob/main/CHANGELOG.md) records what each version changed, and `proton changelog` prints it.
|
|
196
|
+
|
|
197
|
+
## Good to know
|
|
198
|
+
|
|
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.
|
|
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).
|
|
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.
|
|
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.
|
|
203
|
+
|
|
204
|
+
## Contributing
|
|
205
|
+
|
|
206
|
+
Bug reports, ideas, and pull requests are all welcome. [`CONTRIBUTING.md`](https://github.com/roman-16/proton-cli/blob/main/CONTRIBUTING.md) covers the setup, and [`SECURITY.md`](https://github.com/roman-16/proton-cli/blob/main/SECURITY.md) has the private channel for security issues.
|
|
207
|
+
|
|
208
|
+
## Disclaimer
|
|
209
|
+
|
|
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.
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
[MIT](https://github.com/roman-16/proton-cli/blob/main/LICENSE)
|
package/bin/proton.exe
ADDED
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@roman-16/proton-cli-win32-arm64",
|
|
3
|
+
"version": "2.5.0",
|
|
4
|
+
"description": "proton-cli native binary for win32-arm64",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://github.com/roman-16/proton-cli",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/roman-16/proton-cli.git"
|
|
10
|
+
},
|
|
11
|
+
"os": [
|
|
12
|
+
"win32"
|
|
13
|
+
],
|
|
14
|
+
"cpu": [
|
|
15
|
+
"arm64"
|
|
16
|
+
],
|
|
17
|
+
"preferUnplugged": true,
|
|
18
|
+
"files": [
|
|
19
|
+
"bin"
|
|
20
|
+
]
|
|
21
|
+
}
|