Convert Figma logo to code with AI

ProtonMail logoWebClients

Monorepo hosting the proton web clients

4,454
564
4,454
66

Top Related Projects

Tuta is an email service with a strong focus on security and privacy that lets you encrypt emails, contacts and calendar entries on all your devices.

7,583

Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network

A free & open modern, fast email client with user-friendly encryption and privacy features

🛡🛠 You are being watched. Protect your privacy against global mass surveillance.

Quick Overview

ProtonMail/WebClients is an open-source repository containing the web clients for Proton's suite of privacy-focused applications, including ProtonMail, ProtonCalendar, ProtonDrive, and ProtonVPN. It provides a unified codebase for Proton's web-based services, emphasizing security, privacy, and user-friendly interfaces.

Pros

  • Open-source, allowing for community contributions and transparency
  • Unified codebase for multiple Proton services, ensuring consistency
  • Strong focus on privacy and security features
  • Regular updates and active development

Cons

  • Complex codebase due to multiple integrated services
  • Steep learning curve for new contributors
  • Dependency on specific Proton backend services
  • Limited customization options for end-users

Code Examples

As this is not a code library but rather a complete web application, code examples are not applicable in the traditional sense. However, here are a few snippets to illustrate the project structure and coding style:

// Example of a React component in the project
import React from 'react';
import { c } from 'ttag';
import { Button } from '@proton/components';

const ExampleComponent = ({ onAction }) => (
    <Button onClick={onAction}>{c('Action').t`Click me`}</Button>
);

export default ExampleComponent;
// Example of a utility function
import { MINUTE } from '@proton/shared/lib/constants';

export const formatDuration = (durationInSeconds) => {
    const minutes = Math.floor(durationInSeconds / MINUTE);
    const seconds = durationInSeconds % MINUTE;
    return `${minutes}:${seconds.toString().padStart(2, '0')}`;
};

Getting Started

To set up the project locally:

  1. Clone the repository:
    git clone https://github.com/ProtonMail/WebClients.git
    
  2. Install dependencies:
    cd WebClients
    yarn install
    
  3. Start the development server:
    yarn start
    

Note that full functionality requires access to Proton's backend services, which may not be publicly available. Refer to the project's documentation for more detailed setup instructions and potential limitations for external contributors.

Competitor Comparisons

Tuta is an email service with a strong focus on security and privacy that lets you encrypt emails, contacts and calendar entries on all your devices.

Pros of Tutanota

  • Fully open-source, including the server-side code
  • Simpler codebase, potentially easier for contributors to understand and maintain
  • Stronger focus on end-to-end encryption for all data, including subject lines and contacts

Cons of Tutanota

  • Smaller community and fewer contributors compared to WebClients
  • Less feature-rich compared to ProtonMail's offerings
  • Limited third-party integrations and add-ons

Code Comparison

Tutanota (TypeScript):

export function createMailAddress(mailAddress: string): MailAddress {
    const parts = mailAddress.split('@')
    return {
        address: mailAddress,
        name: parts[0],
        domain: parts[1],
    }
}

WebClients (JavaScript):

export const validateEmailAddress = (email) => {
    const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(String(email).toLowerCase());
};

Both projects use modern JavaScript/TypeScript, but Tutanota's codebase tends to be more straightforward, while WebClients often includes more complex logic and validation.

7,583

Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network

Pros of Berty

  • Fully decentralized and peer-to-peer, enhancing privacy and resilience
  • Supports offline messaging through a distributed network
  • Open-source with a strong focus on community contributions

Cons of Berty

  • Less mature project with potentially fewer features
  • May have a steeper learning curve for non-technical users
  • Smaller user base compared to more established messaging platforms

Code Comparison

WebClients (React):

const MessageList = ({ messages }) => (
  <ul>
    {messages.map((message) => (
      <li key={message.id}>{message.content}</li>
    ))}
  </ul>
);

Berty (React Native):

const MessageList = ({ messages }) => (
  <FlatList
    data={messages}
    renderItem={({ item }) => <MessageItem message={item} />}
    keyExtractor={(item) => item.id}
  />
);

Both projects use React-based technologies, but Berty focuses on mobile development with React Native, while WebClients targets web browsers. Berty's approach is more suitable for cross-platform mobile apps, while WebClients is optimized for web-based interfaces.

A free & open modern, fast email client with user-friendly encryption and privacy features

Pros of Mailpile

  • Self-hosted solution, offering greater control over data and privacy
  • More customizable and extensible, allowing users to modify the codebase
  • Open-source nature encourages community contributions and audits

Cons of Mailpile

  • Less user-friendly interface compared to WebClients
  • Requires more technical knowledge to set up and maintain
  • Development appears to be less active, with fewer recent updates

Code Comparison

WebClients (React):

const MailboxContainer = () => {
  const { messages } = useMessages();
  return (
    <div className="mailbox-container">
      {messages.map((message) => (
        <MessageItem key={message.id} message={message} />
      ))}
    </div>
  );
};

Mailpile (Python):

class MailboxView(View):
    def render(self):
        messages = self.get_messages()
        return self.render_to_string('mailbox.html', {
            'messages': messages,
        })

The code snippets show different approaches: WebClients uses React for a modern, component-based frontend, while Mailpile employs a more traditional server-side rendering approach with Python. WebClients' code suggests a more modular and potentially more responsive user interface, aligning with its reputation for a polished user experience.

🛡🛠 You are being watched. Protect your privacy against global mass surveillance.

Pros of privacytools.io

  • Broader scope, covering various privacy tools and services
  • Community-driven project with contributions from privacy enthusiasts
  • Regularly updated with new privacy-focused alternatives

Cons of privacytools.io

  • Less focused on a specific product or service
  • May lack the depth of technical information found in WebClients
  • Potentially slower to update due to community-driven nature

Code Comparison

WebClients (React component):

const LoginForm = () => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  // ... more code
};

privacytools.io (Jekyll template):

{% for section in site.sections %}
  <h2>{{ section.name }}</h2>
  <p>{{ section.description }}</p>
  {% for tool in section.tools %}
    <!-- Tool information -->
  {% endfor %}
{% endfor %}

The code comparison shows that WebClients is a React-based application, focusing on user interface components for email services. In contrast, privacytools.io uses Jekyll, a static site generator, to organize and display information about various privacy tools and services.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

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

Technically, this monorepo is based on Yarn 3 & Yarn Workspaces, with unified versioning for all packages inside.

Getting Started

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

  • Node.js LTS
  • Yarn 3
  • git

You can find more detailed version-constrains for Node.js and yarn in package.json.

# 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
yarn install

# Run web clients by running proton-<package-name>
# Example: proton mail web client
yarn workspace proton-mail start

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

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