Repository navigation
Conversation
Tuta has no IMAP, so a small Rust helper built on Tuta's own SDK speaks to it and talks to Hylki as JSON over stdin. The Flatpak, RPM, deb and AppImage builds compile it and install it next to hylki, and CI tests it.
A Tuta account signs in with its password and authenticator code through the bundled helper, which keeps only a session in the keyring. Mail syncs by polling, bodies decrypt locally, and sending goes to outside addresses. A send whose outcome is unknown is never retried.
native/tuta/prepare.sh prepares the Tuta SDK, then applies three small patches carried here: recipient key data for encrypted sends through the SDK's own key facade, decrypting service replies with the request's key, and entity PATCH. Every build path runs it.
Mail to Tuta addresses now goes end-to-end encrypted, as in Tuta's own apps. Folders can be created, renamed and deleted, tags map to Tuta labels, drafts and templates live on the server, mail can be deleted for good, imported, snoozed and undone, replies thread, and new mail is pushed instead of polled.
Owner
|
Thanks for the PR but I am declining the merge. Tuta doesn't support third-party clients in this way and I do not wish to create something that might go against their EULA. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Tuta as a native account type. Tuta has no IMAP, SMTP or JMAP, so the account goes through
hylki-tuta, a small helper built on Tuta's own Rust SDK (via tutabridge). Hylki starts it per operation, or once for push, and talks to it as versioned JSON over stdin. It opens no port and keeps no files.What works
session:<address>; the password is never stored.Limits
SDK patches
The pinned SDK keeps a few things private that a client needs, so
native/tuta/sdk-patches/carries three small patches, whichnative/tuta/prepare.shapplies after tutabridge's ownsdk-prepare.py:AsymmetricCryptoFacadeandPublicKeyProvider. No crypto is written outside the SDK, and the patch comes with SDK unit tests.The patched tree goes to
native/tuta/prepared/with its ownEXPECTEDdigest, so tutabridge's build check still covers exactly what is compiled.Sending safely
A send whose outcome is unknown is never retried and never queued: Hylki shows "The message may have been sent. Check Sent before trying again." The helper decides this from what actually went over the wire, so a request that never left is a plain failure.
Packaging
The helper is a separate GPL-3.0-or-later crate under
native/tutawith its ownCargo.lock. Flatpak, RPM, deb and AppImage build it and install it next tohylki; Hylki looks for it there first, then onPATH, and everything except Tuta works without it. CI prepares the SDK, generates the helper's cargo sources and runs its tests.docs/BUILDING.mdanddocs/LICENSE.mddescribe both.Testing
mainin the GNOME 50 SDK sandbox: three tray icon renders, the MCP stale-socket test, and the own-mailbox card face.#[ignore], gated onTUTA_LIVE*), every step through the worker's own handlers:readyandmail_changed;confidential: trueand the TutaCrypt key, and the mail decrypting in Inbox and Sent;Import was checked only up to the plan refusal, because the test account is on Essential.
hylki-tutaruns inside it.This came out of the Postcard mail client's Tuta work and was written with AI assistance. I'm happy to adapt it to how you want the code laid out.