ProtonMail/WebClients

Monorepo hosting the proton web clients

TypeScript

5,637

36,634 commits

updated Oct 12, 2026

See the code

README

Web clients

This project is a monorepo hosting the Proton web clients. It includes the web applications, their dependencies & shared modules as well as all tooling surrounding development of the web clients (as well as some additional miscellaneous things).

  • Proton Mail
  • Proton Calendar
  • Proton Drive
  • Proton Account
  • Proton VPN
  • Proton Pass
  • Proton Wallet
  • Proton Lumo
  • Proton Meet

Technically, this monorepo is based on pnpm & pnpm workspaces, with unified versioning for all packages inside.

Getting Started

Prerequisites

You'll need to have the following environment to work with this project:

  • Node.js LTS
  • pnpm 12 (see the packageManager field in package.json for the exact version), e.g. npm install -g pnpm@<version>
  • git

See package.json for specific version requirements.

Installation

# Clone the project
git clone https://github.com/ProtonMail/WebClients.git
git clone git@github.com:ProtonMail/WebClients.git

# Install all dependencies for the entire monorepo & symlink
# local dependents to one another
pnpm install

# Run web clients by running proton-<package-name>
# Example: proton mail web client
pnpm --filter proton-mail run start

For additional details on how to interact with the monorepo, see the pnpm docs for reference.

How VPN app differs from the rest

VPN is present in both proton.me and protonvpn.com. However, they are served differently. Some parts of VPN are shared, hosted within @proton/components or @proton/shared, however, the entry points to them are different.

For protonvpn.com, the entry point comes from applications/vpn-settings and for account.proton.me/u/{X}/vpn, the entry point is applications/account.

Since both domains are separate, we don't share a local SSO between them. Therefore, we need to serve both applications separately:

# To serve VPN through vpn-settings
pnpm --filter proton-vpn-settings run start --port 8050

# To serve VPN through account
pnpm run start-all --applications "proton-account"

How to version an application manually

While being on the main branch for a clean release.

From the root folder, run pnpm --filter @proton/version run version --applications proton-X --version x.x.x.x

Help us to translate the project

You can learn more about it on our blog post.

License

The code and data files in this distribution are licensed under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See https://www.gnu.org/licenses/ for a copy of this license.

See LICENSE file

monorepo
pgp
protoncalendar
protoncontacts
protondrive
protonmail
react
webmail
yarn

ProtonMail/WebClients

Monorepo hosting the proton web clients

TypeScript

5,637

36,634 commits

updated Oct 12, 2026

See the code

README

Web clients

This project is a monorepo hosting the Proton web clients. It includes the web applications, their dependencies & shared modules as well as all tooling surrounding development of the web clients (as well as some additional miscellaneous things).

  • Proton Mail
  • Proton Calendar
  • Proton Drive
  • Proton Account
  • Proton VPN
  • Proton Pass
  • Proton Wallet
  • Proton Lumo
  • Proton Meet

Technically, this monorepo is based on pnpm & pnpm workspaces, with unified versioning for all packages inside.

Getting Started

Prerequisites

You'll need to have the following environment to work with this project:

  • Node.js LTS
  • pnpm 12 (see the packageManager field in package.json for the exact version), e.g. npm install -g pnpm@<version>
  • git

See package.json for specific version requirements.

Installation

# Clone the project
git clone https://github.com/ProtonMail/WebClients.git
git clone git@github.com:ProtonMail/WebClients.git

# Install all dependencies for the entire monorepo & symlink
# local dependents to one another
pnpm install

# Run web clients by running proton-<package-name>
# Example: proton mail web client
pnpm --filter proton-mail run start

For additional details on how to interact with the monorepo, see the pnpm docs for reference.

How VPN app differs from the rest

VPN is present in both proton.me and protonvpn.com. However, they are served differently. Some parts of VPN are shared, hosted within @proton/components or @proton/shared, however, the entry points to them are different.

For protonvpn.com, the entry point comes from applications/vpn-settings and for account.proton.me/u/{X}/vpn, the entry point is applications/account.

Since both domains are separate, we don't share a local SSO between them. Therefore, we need to serve both applications separately:

# To serve VPN through vpn-settings
pnpm --filter proton-vpn-settings run start --port 8050

# To serve VPN through account
pnpm run start-all --applications "proton-account"

How to version an application manually

While being on the main branch for a clean release.

From the root folder, run pnpm --filter @proton/version run version --applications proton-X --version x.x.x.x

Help us to translate the project

You can learn more about it on our blog post.

License

The code and data files in this distribution are licensed under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See https://www.gnu.org/licenses/ for a copy of this license.

See LICENSE file

monorepo
pgp
protoncalendar
protoncontacts
protondrive
protonmail
react
webmail
yarn

Significant stargazers

(top 24 of 51)

Ihor Hordiichuk

41 followers · starred Nov 2020

Aleksa Sarai

1,036 followers · starred Aug 2017

afc163

7,371 followers · starred Sep 2025

J. Ryan Stinnett

386 followers · starred Oct 2025