Skip to content

Ekko 0.8.0 — invite links

Latest

Choose a tag to compare

@github-actions github-actions released this 19 Jul 03:10
0a5b1f4

First contact is now a link instead of a wall of base64 — plus automatic backups, a WhatsApp LID fix, and bubbles that never flash ciphertext.

Invite links

  • Your invite is a useekko.app/i/# link now — copy it from the popup's Identity tab or the in-page invite pitch. A claimed @handle makes a short link; an identity without one carries its whole public key in the link's fragment, which the browser never sends to any server.
  • With Ekko installed, opening a link stages the invite behind the usual show-key-then-tap add — a link never auto-adds a contact, and the key is previewed by its security code first. Without Ekko, the link lands on a page that explains and routes to install, and the invite survives the install gap.
  • On Instagram, whose composer caps message length, a too-long key link degrades to the plain pitch instead of pasting broken.
  • Hardened after the first cut (#8): a staged invite survives offline popup opens and messenger-mangled links, and links mint in their final /i/ form.

Backup, accounts, onboarding

  • Backups are automatic: the first backup (or a restore) keeps the derived key inside the encrypted vault, and every change re-seals and uploads a current blob. The passphrase still never leaves your device and remains the only thing that opens the blob; deleting the backup forgets the key too.
  • Sessions travel inside the backup (~250 B each, capped at 4 per peer), so a restore no longer orphans readable history.
  • Restore enters the 6-word backup and 24-word recovery phrases one box per word (paste spreads across boxes), validates whole phrases on submit, and offers "wrong account? sign out and pick another". Starting fresh also wipes an unopenable backup.
  • Connected socials are a read-only mirror of your account — manage them on the account page once, not per install.

Bubbles

  • Re-mounts and sends never flash raw ciphertext: a pre-paint cover pass lands cached plaintext (or the cover) before the browser paints.
  • The lock keeps its slot across the reveal toggle; revealed ciphertext is a quiet mono chip.
  • Ekko content takes the platform text's place and native chrome (Telegram's floated timestamp/ticks) stays last, so bubbles lay out like native messages.
  • A message sealed under a secure channel you no longer hold says so, instead of "waiting" forever.

Platforms

  • WhatsApp: peer phones resolve through the contact store in the LID era — records that carry no phone anywhere no longer break identification or dark existing bindings.
  • Telegram: the Ekko bubble preserves in-bubble timestamps/ticks and caches the stripped token that raw textContent used to poison.

Staying current

  • Installs without store auto-update (the GitHub zip, unpacked dev builds, the Safari app) get a quiet "Ekko X.Y.Z is out" notice on the popup's Home tab — one anonymous, day-cached GET against this releases list.
  • The Contacts tab shows an honest freshness stamp: when contacts last synced, and "contacts as of …" when a sync fails.

Repo

  • The release pipeline gains a Safari lane: a Mac runner signs (Developer ID, hardened runtime), notarizes and staples a drag-to-install .dmg and attaches it here. It skips quietly until the Apple signing secrets are configured, so this release ships as the zips below.

Install: unzip, then chrome://extensions → Developer mode → Load unpacked → pick the unzipped folder. The Firefox zip is experimental.

Contributors: @vasilevklart