{"id":15511218,"url":"https://github.com/ljanyst/peroxide","last_synced_at":"2026-01-22T20:19:25.882Z","repository":{"id":57646893,"uuid":"442902964","full_name":"ljanyst/peroxide","owner":"ljanyst","description":"A third-party ProtonMail bridge serving SMTP and IMAP","archived":false,"fork":false,"pushed_at":"2023-01-27T03:57:56.000Z","size":12040,"stargazers_count":63,"open_issues_count":5,"forks_count":4,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-10-12T08:31:47.302Z","etag":null,"topics":["email","encryption","privacy"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ljanyst.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-29T22:14:57.000Z","updated_at":"2025-10-02T13:02:59.000Z","dependencies_parsed_at":"2023-01-31T05:30:36.129Z","dependency_job_id":null,"html_url":"https://github.com/ljanyst/peroxide","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ljanyst/peroxide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljanyst%2Fperoxide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljanyst%2Fperoxide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljanyst%2Fperoxide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljanyst%2Fperoxide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ljanyst","download_url":"https://codeload.github.com/ljanyst/peroxide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljanyst%2Fperoxide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28670366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T19:36:09.361Z","status":"ssl_error","status_checked_at":"2026-01-22T19:36:05.567Z","response_time":144,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["email","encryption","privacy"],"created_at":"2024-10-02T09:52:54.248Z","updated_at":"2026-01-22T20:19:25.858Z","avatar_url":"https://github.com/ljanyst.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\nperoxide\n========\n\n⚠ **Warning**: This software has not been thoroughly reviewed for security.\nYou should only use it if you know what you're doing. I strongly advise against\nrunning it on the open Internet.\n\nPeroxide is a fork of the [ProtonMail bridge][1]. Its goal is to be much like\n[Hydroxide][2] except with as much re-use of the upstream code as possible. The\nre-use ensures that the upstream changes to the service APIs can be merged in as\nfast and as efficiently as possible. At the same time, Peroxide aims to run as a\nserver providing data access using standard protocols so that a wide variety of\ndevices can use their native productivity tools.\n\nLike the original bridge and unlike Hydroxide, Peroxide requires a paid\nProtonMail account.\n\nTo that end, Peroxide:\n\n * is buildable using plain `go build`\n * drops the original GUI and CLI\n * drops all the desktop integration and trackers\n * drops dependence on binary packages\n * drops the integrated upgrade functionality\n * unables multiple device-specific passwords for every account\n * encrypts the ProtonMail credentials on disk and does not require any external\n   secret store to do that\n * user-supplied passwords are keys used to decrypt the credentials in memory; they\n   are never stored on disk\n\nServer setup\n------------\n\n⚠ **Warning**: This software has not been thoroughly reviewed for security.\nYou should only use it if you know what you're doing. I strongly advise against\nrunning it on the open Internet.\n\nRun the `install.sh` script to install peroxide in your system.\n\nPeroxide reads its settings from a configuration file located in\n`/etc/peroxide.conf` by default. This configuration file holds a bunch of\nkey-value pairs in YAML format. There's an example in the root of the source\ntree in a file called `config.example.yaml`.\n\nThe package provides two executables:\n\n * `peroxide` - the program that interacts with ProtonMail's services and acts\n   as an IMAP and SMTP server for the email clients\n * `peroxide-cfg` - the program that manages the user accounts, login keys, and\n   implements other helper functions\n\nPeroxide encrypts the IMAP and SMTP communication with the clients using TLS and\nwill not work without a valid certificate. You can either use a service like\nLet's Encrypt to get a certificate signed by a trusted CA or use `peroxide-cfg`\nto generate a self-signed one. Running:\n\n    ]==\u003e sudo -u peroxide peroxide-cfg -action gen-x509 -x509-org \"my-organization\" -x509-cn \"my-hostname\"\n\nwill generate `cert.pem` and `key.pem` files in the current working directory.\nThese files must be copied to the location where the server expects them, as\nconfigured in `peroxide.conf`. By default, it's: `/etc/peroxide/`.\n\nYou can then enable the service by typing:\n\n    ]==\u003e sudo systemctl enable peroxide\n    ]==\u003e sudo systemctl start peroxide\n\nUser management\n---------------\n\nTo log in to your ProtonMail account, type:\n\n    ]==\u003e sudo -u peroxide peroxide-cfg -action login-account -account-name foo\n\nIt will authenticate you with the ProtonMail's services and print a\nrandom-generated key. Please note this key; it will be needed to add\ndevice-specific keys or re-login.\n\nTo add a device-specific key type:\n\n    ]==\u003e sudo -u peroxide peroxide-cfg -action add-key -account-name foo -key-name test\n\nThe command will add a device-specific key called `test` to the user account\n`foo` and print that key to standard output. As above, this key is not stored\nanywhere, but it must be used for authentication in your email program.\n\nFor the settings described above, the emain client configuration would be:\n\n * **Login:** `foo..test@protonmail.com` (appending `..test` to the username\n   portion of the login selects the device-specific key named `test`)\n * **Password:** The random key printed by the configuration program when adding\n   the device-specific key\n * **SMTP/IMAP server:** The address of the server running peroxide\n * **SMTP Port:** 1025\n * **IMAP Port:** 1143\n * **Encryption:** STARTTLS for both SMTP and IMAP\n\n`peroxide-cfg` provides a bunch of other functions dealing with user and key\nmanagement described in the program's help message. Any change to the\nconfiguration, including adding accounts or keys, necessitates a restart of the\nserver.\n\nDevice Configuration\n--------------------\n\nWhen working with laptops or desktop computers, it's easy to enter this\nconfiguration data by hand into whatever program you need. The\n`cmd/mobileconfig-gen` directory contains a program that generates device\nconfiguration files for iOS. It takes JSON as input:\n\n\n    ]==\u003e ./mobileconfig-gen -in account.json -out account.mobileconfig\n\nYou can upload this file to some secret location (it contains your passwords)\nand generate the QR code pointing to it like this:\n\n    ]==\u003e qrencode -t ansiutf8 https://secret.location/of/the/mobile/config/file\n\nThen, scan this code with your device's camera.\n\n[1]: https://github.com/ProtonMail/proton-bridge\n[2]: https://github.com/emersion/hydroxide\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fljanyst%2Fperoxide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fljanyst%2Fperoxide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fljanyst%2Fperoxide/lists"}