ElectronMail is an Electron-based unofficial desktop client for ProtonMail. The app aims to provide enhanced desktop user experience enabling features that are not supported by the official in-browser web clients. It is written in TypeScript and uses Angular.
The download page with Linux/OSX/Windows installation packages is here.
The way of verifying that the installation packages attached to the releases have been assembled from the source code is being provided.
Some package types are available for installing from the repositories (
Snap repositories are being maintained by @joshirio and
MPR/Debian repo by @hiddeninthesand):
database.binfile (see FAQ for file purpose details). So the app allows you to view your messages offline, running full-text search against them, exporting them to EML/JSON files. etc. Enabled since v2.0.0 release.
Tor version 3 addressAPI entry point in the dropdown list and configuring a proxy as described in this message.
experimentallabel, #227. The feature enables the scenario when you to enter the account credentials on the login form only once, manually or automatically by the app, and then you never see the login form anymore for this email account even if you restart the app (unless you explicitly dropped the session in the admin area or it got dropped by the service due to the inactivity/expiration). If this feature is enabled for the account, manual credentials filling is the preferred option as a more secure option since you don't save the account credentials anywhere (
credentialsare encrypted though even if saved, see
settings.binfile description in the FAQ).
left-thin). See details in #36 and #175. Demo screenshots placed in the images folder (specifically this image).
online / livemode, not available in
offlinemode since not stored locally). Feature released with v2.0.0-beta.4 version, requires local store feature to be enabled.
:sunglasses: Per-account custom CSS injection (per-account styling). Enabled since v4.10.0. See #355 for details.
:pencil: Spell Checking.
You got it here.
The reproducible builds idea is respected by the project. So the simplest way to prepare your own installation package from the source code is to clone the project. The respective GitHub Actions CI config file comes with the project.
nvm install 16.
nvm use 16.
npmv7+, not the v6 (run
npm -vto see the version).
Windows: the simplest way to install all the needed stuff on Windows is to run
npm install --global --production windows-build-toolsCLI command.
makeand a C/C++ compiler toolchain, like
GCCare most likely already installed. Besides keytar needs
libsecretlibrary to be installed.
pythonand Xcode need to be installed. You also need to install the
Command Line Toolsvia Xcode, can be found under the
Xcode -> Preferences -> Downloadsmenu.
yarnto be available on your system. Additional setup is required if you run Windows, see.
pnpm install --frozen-lockfile(setting
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1environment variable might speed up the process).
pnpm run app:dist.
pnpm run electron-builder:distcommand to build Windows/Mac OS X package and one of the following commands to build Linux package:
pnpm run electron-builder:dist:linux:appimage
pnpm run electron-builder:dist:linux:deb
pnpm run electron-builder:dist:linux:freebsd
pnpm run electron-builder:dist:linux:pacman
pnpm run electron-builder:dist:linux:rpm
pnpm run electron-builder:dist:linux:snap
To recap, considering that all the described build requirements are met, the short command to build let's say Arch Linux package will be
pnpm install --frozen-lockfile && pnpm run app:dist && pnpm run electron-builder:dist:linux:pacman.
If you want to backup the app data these are only files you need to take care of (files localed in the settings folder):
config.json file keeps config parameters. There is no sensitive data in this file, so unencrypted.
settings.bin file keeps added to the app accounts including credentials if a user decided to save them. The file is encrypted with 32 bytes length key derived from the master password.
database.bin file is a local database that keeps fetched emails/folders/contacts entities if the
local store feature was enabled for at least one account. The file is encrypted with 32 bytes length key randomly generated and stored in
settings.bin. The app by design flushes and loads to memory the
database.bin file as a whole thing but not like encrypting only the specific columns of the database. It's of course not an optimal approach in terms of performance and resource consumption but it allows keeping the metadata hidden. You can see some details here.
database-session.bin file is being used in the same way and for the same purpose as
database.bin but it holds the current session data only. The data from this file will be merged to the
database.bin on the next app unlocking with the master password.
session.bin file holds the session data of the email accounts. The file is used if the
Persistent Session feature is enabled for at least one account (the feature introduced since v4.2.0 version with
experimental label, #227). The file is encrypted with 32 bytes length key randomly generated and stored in
log.log file keeps log lines. The log level by default is set to
It's recommended to perform the following actions before uninstalling the app:
- If you had the
Keep me signed in feature enabled (see screenshot), click
Log-out action in the app menu (see screenshot). That will remove locally stored master password (done with node-keytar). You can also remove it having the app already uninstalled, but that would be a more complicated way as you will have to manually edit the system's keychain.
- Remove settings folder manually. You can locate settings folder path clicking
Open setting folder app/tray menu item (see screenshot) or reading
app.getPath(name ="userData") related
app.getPath(name) section here.