Video calls and screen sharing on the Mac
Mac calls can use video, with camera choice and up to 1080p, and share a screen or window. Audio calls get a compact floating strip, and the conversation can sit beside a call.
New
Video calls on the Mac
Video calling is available on the Mac without a developer switch. Camera selection and higher picture quality, including 1080p when the connection permits, are part of the call controls.
New
Screen sharing adapts separately
Shared screens now have their own picture quality and connection handling, including a sharper refresh after movement stops. Fine text and difficult connections still need more work.
Also new
- A compact window for audio calls. Audio calls have a compact floating strip with call status and controls, making it easier to keep chatting while a call continues.
- Keep the conversation beside a call. The conversation can appear in the right panel during a call, so messages stay within reach alongside the call.
- Recovery for the last remaining member. A recovery kit can bring back the organisation and its groups even when the restoring person was their sole member. Recovery still depends on the person’s kit and encrypted backup.
- Restore beside a working account. Restore from Recovery Kit is available while another account is already working. It can restore a different server’s account or resume an unfinished restore without replacing the working accounts.
- Finish an interrupted account setup. Settings shows accounts whose registration did not finish, with Try again and Remove actions. A failure in the final setup step now leaves the account in that recoverable state.
- Emoji while you type. The composer gains emoji shortcodes and emoticon completion, offering a faster way to enter familiar emoji.
- Familiar text editing keys. Text fields use the platform’s usual editing key bindings, so everyday keys behave as they do in the system’s own fields.
- Updated app artwork. Lowfire uses new app artwork, fitted consistently for the icon sizes the app needs.
- Storage information for server operators. Server operators can inspect storage use and limits for each organisation. This provides administration information without access to message contents.
- Organisation removal for operators. The operator interface can delete an organisation. The app explains when its server operator has removed one, instead of leaving people with an unexplained failure.
- Conversations belong to an organisation. Every direct conversation and group belongs to one organisation. This strengthens the separation between workspaces and makes membership and removal apply consistently to their conversations.
- Read and navigate a shared screen. A viewer can choose actual size, fit or full screen, and zoom or pan the shared picture. Clear permission and capture-failure messages offer system settings or Share Again where supported.
Fixed
- Video returns when the connection can carry it. Video paused by a weak connection resumes when a usable path returns. A good connection no longer incorrectly shows “Video paused: poor connection,” and a broken codec can be replaced.
- Better video on a narrow connection. Video transmission was adjusted to show more of the available frames with less waiting when bandwidth is limited. This improves difficult calls.
- Opening the camera leaves the app responsive. The camera and video encoder open on their own thread, reducing interference with the app while video starts.
- Smoother video and sound together. Video playback adapts its delay to the connection and keeps the picture aligned with the sound, reducing uneven playback.
- Self view stays where you put it. Dragging the self view during a video call now keeps it at the chosen position.
- A call continues without video support. On a device without usable video, a video call continues as an audio call and explains the limitation. This includes Linux.
- Recover conversation names and explain server trouble. Conversations left without a name can recover their display information. Unavailable servers are described more clearly instead of presenting ambiguous account or conversation state.
- Explain a full organisation. When an organisation reaches its member limit, its admins can see the server operator’s explanation. Storage refusals likewise tell an admin why an upload was turned away.
- A steady admin choice in invitations. Selecting “They become an admin” in the invite flow no longer flashes.
- Automatic appearance follows the system immediately. Choosing automatic appearance applies the current system theme at once, including on machines that switch appearance automatically.
- Clear attachment selection and keyboard focus. Clicking an attachment selects it and keyboard focus is visible in the message log. Quick Look is offered on the Mac, and copying or previewing a message preserves the keyboard’s place.
- Less work while typing long drafts. When typing in a draft with several paragraphs, accessibility caret positioning lays out the paragraph being edited rather than repeatedly processing the entire draft.
- Setup retries recover earlier progress. Retrying account creation finds an account an earlier attempt already made and reconciles its organisation membership. A limited automatic retry also handles a further internal refusal with a fresh group.
- One explanation for a failed retry. Try again on an unfinished account reports a failure once, avoiding repeated copies of the same error.
- Restored history takes over leftover conversations. Restoring over conversations left by an interrupted attempt takes them over as history rather than conflicting with their leftover records.
- Failed restore and linking clean up their changes. If restore or device linking fails, conversations added during the failed step are also released from memory as the stored changes roll back.
- Incomplete history stays marked incomplete. A partly downloaded history page remains marked partial after restarting, so the app can still fetch what is missing.
- Retention cleanup avoids false gaps. The app bounds the markers it keeps for history removed by retention without wrongly showing holes in the conversation.
- New conversations avoid leftover records. A new conversation no longer reuses an identifier that still has old stored records, preventing the new conversation from colliding with remnants.
- Waiting commands receive a final answer. Commands waiting for a conversation now receive an answer when that conversation is torn down instead of remaining pending indefinitely.
- Keep the information needed to recover an organisation key. After an organisation key is rejected, the client retains the recovery hint until a usable replacement arrives. Empty key lists are also handled safely during key rotation.
- Keep older device certificates during updates. Saving a longer device history preserves certificates for older devices, so extending the record does not discard information needed to check it.
- Explain a peer’s disabled account. A direct conversation can explain that the server reports the other account as turned off. The wording distinguishes the server’s report from a fact the app independently proved.
- Download updates without holding the whole archive. Update archives are streamed and checked as they arrive, with bounded memory use and download limits.
- A required key change can follow revocation. Revoking a device can trigger the required organisation-key change even when the account has used its ordinary key-change allowance. Separate device-change limits still bound repeated additions and revocations.
In the works 6 changes · designs and groundwork
- Presence storage groundwork. The server gains storage and checks for presence updates, including changes in device and organisation membership.
- Private push groundwork. The private push design and its server and client core pieces are built: registrations are sealed and wakes carry no message or call contents. Delivery through each platform builds on them.
- Group call design and contracts. A design and shared contracts define small group calls, their participants and protected connection descriptions.
- Organisation emoji and animation design. A proposed design covers encrypted organisation emoji, including animated images and controls on who may manage them.
- Reusable invitation design. An accepted design specifies invitation links that may be used more than once, with use limits and revocation.
- Planned version retirement and security updates. The protocol gains an explicit version retirement policy, server dates and version usage information for operators. Signed update information can identify security releases, ahead of an advance warning for people using the app.
Under the hood 16 changes · tests, tools and the server
- Thorough cleanup when forgetting. Forgetting accounts and conversations removes their associated keyed records. Cleanup also reports allocation failures safely instead of proceeding with an incomplete copy.
- Revocation protects future backups. Revoking a device changes the backup protection so that the revoked device cannot read later backup writes. The change also fixes a crash when linking another device after recovery.
- Safer backup and device transfer. Backup and linking exports stop on failure and erase rejected copies. Linking strengthens how its meeting point is derived and refuses obsolete work.
- Check removal notices against device records. The client checks device and account removal notices rather than relying only on the server’s assertion. Device identity matching also works when the notice’s membership position is wrong.
- Stronger checks on keys and membership records. Key checks reject invalid weak inputs, organisation log entries and proofs have a canonical form, and devices compare verified device-history heads inside encrypted conversations.
- Stricter parsing of outside data. The app rejects ambiguous encoded data and repeated fields in incoming structured input. Linux drag previews use the bounded image decoder, and empty roster or directory identifiers are handled safely.
- Bound server connection and key requests. The server limits device connections, connection attempts, device churn and repeated requests for joining material. Relay credentials have a strictly checked short lifetime, while held join messages get another chance to finish.
- Better call and screen quality checks. Video and screen sharing receive documented quality targets and revised measurement tools. Call timing, frame comparisons, self-view checks and simulated clocks are made more reliable.
- More trustworthy build and release checks. Debug builds use the development Rust library, while release checks measure the binaries that ship. Build, cache and language-boundary checks now include the effective compiler environment, actual module lists, structure layouts and the performance budget used to judge a pass.
- Reliable server lifecycle tests. Server tests now wait for the actual admission, delivery, alarm and cleanup events they need. This removes races in restart, revocation, backup rotation and message ordering checks, and conversation creation reconciles its scheduled work.
- Reliable interface and launch tests. Interface checks use stable sample dates, wait for actual rendering and keychain work, and reset call state consistently. Launch tests also handle newer Python, cached executables and observer failures more safely.
- Consistent automation actions and timing. Automation setup copying, log clearing and popover closing use the same command registry as other actions. Interface automation work is less dependent on the timing of individual requests.
- Broader checks and leaner development work. Server tests and type checks join the regular change gate, with end-to-end checks scheduled separately. Continuous integration uses path-based work, parallel runner slots and less repeated setup; unused inherited code is removed and dependency advisory review gains a schedule.
- Clearer development coordination and contracts. Agent instructions tighten branch pushing and update the landing workflow. Issue priorities, module dependency checks, the command reference and the description of what the server retains are brought into line with the project.
- Exercise backup failures directly. Backup upload tests cover bounded allocation failures through the real loading and upload path, improving the checks around interrupted encrypted backups.
- Stronger upload and administration checks. The server authorises attachment parts before reading their bodies and limits repeated attachment and backup setup requests. Administration requests also have stricter credential and attempt checks.