Work in progress. Crocodile is still being built. Some of what this site says about security and features describes where we're heading and may not be true yet.Some claims here may not be true yet. See the latest status

Release

Crocodile 0.9.0 is out

Crocodile 0.9.0 is out. It is a security release: everyone should update, and anyone who runs a server should update all their servers together. Older versions and this one cannot talk to each other in a few places (see "Updating" below).

What's new

  • Stricter checks between servers. Servers check more carefully who a message, a presence update or a session request comes from, and limit how quickly one server can introduce others. A device now signs its own part in a conversation, so a server it isn't connected to can't speak for it.
  • Chat messages and files are tied to the space they were sent in. Messages name their space, and file ids are tied to their author.
  • Invite links. A space has one open link at a time, lasting at most 30 days, and its secret stays in the link, so no server learns it. You can also invite one person by name. Member lists are shown only to the space's owner and members. Links made by older versions stop working; make a new one.
  • Linking a new device is harder to tamper with. The security code is checked before the account is sent, and the transfer is protected against future quantum computers like the rest of the app.
  • Conversations from people you don't know wait as requests. Nothing of yours is shared with them until you accept.
  • Blocking works in spaces. A blocked member's messages are not kept, and keys and files are not given to them.
  • Removed devices clean up after themselves. A device you remove from your account stops and clears its copy of the account the next time it is online.
  • Voice and video. Each frame is accepted once, voice stays at a constant bitrate whatever the host's description says, and members' keys can't displace each other.
  • A calmer desktop app. The app's window only shows its own pages, the parts of the app that talk to your computer check what they are asked, release builds switch off the debugging doors, files you receive are marked as coming from outside, and there is a warning when your system has no keychain.
  • Command line tool. It shows other people's text without hidden control characters, saves a received file only once it is whole, and runs one command at a time per account.
  • Servers stay responsive under load. Long answers are sent in parts, lookups of many profiles make fewer requests between servers, requests and replies are limited per address, and each account can store a bounded amount.
  • Directory and relay hardening. The public directory checks a server's address more carefully before listing it. The built-in relay reads requests exactly as they were signed.
  • Installers check what they download. The one-line installers fetch over https only and compare each download with the checksum the release lists before installing it.
  • Up-to-date components. Electron 44.10.0 (Chromium 152.0.7977.169), WebRTC (werift), the build tools and the app's libraries.

Updating

  • Everyone: click Update in the top bar. New messages and files from people who have not updated yet will not appear until they do, and a device cannot be linked between an old and a new version: update both first. The download page has fresh installers.
  • Server operators: this release uses protocol 4. Servers on older versions cannot link to it, so update them all together. Behind a reverse proxy, set --trust-proxy (CROC_TRUST_PROXY=1). The self-hosting compose file now publishes the directory on 127.0.0.1 only (CROC_DIR_BIND=0.0.0.0 to change it). The self-hosting guide has the details. Our own server is already on 0.9.0.

Corrections on this site

We went through this site's claims again for this release and fixed the ones that were too strong or incomplete:

  • Forward secrecy against a stolen device prekey lasts about eight days (longer if the device was switched off), not 30 minutes: a message key is replaced every 30 minutes, but it travels sealed to a prekey that a device keeps that long.
  • A removed device stops and clears itself in the app as shipped, but a device that stays offline or has been modified keeps what it has and can still sign as you, because every device holds the account key.
  • The server you're connected to sees whom you contact while you do. To follow profiles live, it also asks the servers that hold them to watch the ids, and those servers see them for up to five minutes. They aren't told which user asked, but on a server with one user that is that person. The privacy notice says so now.
  • A room's host can mislabel who is speaking, or hold frames back or deliver them late, though it can't read the content.
  • Deleting an account leaves a "Deleted user" marker with your ID and public keys.
  • The one-line installer on Linux uses apt, dnf or zypper, which ask for your password (without them it installs an AppImage in your home folder), and a server behind a reverse proxy needs CROC_TRUST_PROXY=1. Global push-to-talk on Linux needs X11 for now.
  • The Lounge invite on the download page is a new link: the old one no longer works with 0.9.0.

Crocodile is still a beta and has not had an independent security audit. Please don't rely on it where your safety depends on it. The full list of changes is on the release page.

← All updates