Skip to content

Lightning 0.7.0

Choose a tag to compare

@Mizerd Mizerd released this 15 Aug 06:42
· 169 commits to main since this release

Lightning 0.7.0

The largest Lightning release to date: 40+ commits since v0.6.6 spanning a
new sign-in method, a complete moderation set, voice messages, thread
parity, and a long run of live-feedback fixes driven by real daily use.

OAuth 2.0 / OIDC browser sign-in — live validated

Lightning can now sign in through the system browser using OAuth 2.0 /
OIDC (Client::oauth() on matrix-sdk 0.18). PKCE, the CSRF state, the
code exchange and token refresh are SDK-owned; Lightning adds only the
loopback callback listener and the two-phase store lifecycle that keeps a
freshly issued device from ever adopting another device's store. Refresh
tokens rotate and persist; a revoked session surfaces honestly instead of
looping.

Validated live against matrix.org (Matrix Authentication Service):
end-to-end browser login, new-account registration through the Google
upstream identity provider
, token refresh, restart restoration, and
sign-out. The homeserver field now discovers the available sign-in
methods as you type (and for the prefilled server on open) instead of
waiting for Enter.

Moderation: kick, ban, unban

The member profile popover now carries the full moderation set, gated by
SDK-derived power-level permissions (never role labels) and offered only
against members strictly below your own level:

  • Remove (kick) and Ban, with an inline confirm and optional
    reason.
  • Unban — banned members are now visible in the People list (sorted
    last, with a "Banned" chip) precisely so unban is reachable. Unban
    carries its own permission flag: its required level is max(ban, kick)
    per the spec, asked of the SDK.
  • Invite back after unbanning (default on): a successful unban is
    followed by a normal invite, so restoring a member is one action.
  • Inviting a banned user is blocked up front with guidance to unban
    first, instead of an unexplained server rejection.

People list: instant and live

The Room Information People list renders instantly from the local cache
(a partial snapshot precedes the network roster under the same request)
and stays live: membership changes seen in sync refresh an open panel
without reopening it, rate-limited so busy bridged rooms cannot flood the
client.

Voice messages

MSC3245 voice messages: record with a live waveform, preview, and send —
in rooms and in threads, through the SDK's encrypting attachment path.
Sent as mono 32 kbps Opus. The thread composer gained the same mic as the
room composer, with single-owner recording semantics.

Threads

  • Thread participant facepiles on summary cards, from the thread's own
    events (root sender first), cached per thread.
  • Thread voice messages (above) — never falling back to a room send.
  • Per-room notification modes gained "Follow account default", mapped
    to the real absence of a server push rule, with retry on reconnect.

Timeline and media

  • Outgoing videos carry a real poster thumbnail, extracted locally and
    attached through the SDK (encrypted alongside the payload in encrypted
    rooms); cards take the video's real shape from the first render, and
    learned dimensions persist across sessions.
  • Software video decoding by default — VAAPI deadlocked on rotated video.
  • Read receipts: Element-style chips now ride one fixed right-edge rail;
    a user's receipt shows on their own message; reader avatars fall back
    to the avatar the timeline itself has seen, so chips stop degrading to
    letter initials.
  • Sender names are coloured per user (deterministic, hue-matched to the
    avatar palette, WCAG AA-verified inks in both light and dark themes).
  • Big-emoji rendering for 1–3 emoji-only messages; images close on any
    click; files can be dropped anywhere in chat.

Interface

  • Space Home: double-click a Space in the rail (or click the
    workspace title) to open the Space's front page with its room list —
    the surface existed but was unreachable.
  • Room list filters: All / People / Rooms / Unreads chips, persisted
    per account — rooms no longer sink under a hundred DMs.
  • Interface zoom: 75–150% whole-UI scale (Settings → Appearance, or
    Ctrl+= / Ctrl+- / Ctrl+0 anywhere). Applies on the next launch — Qt
    reads its scale factor once at startup.
  • One identity-colour policy everywhere: a direct-message partner gets
    the same fallback colour in the room list, quick switcher, headers,
    member list, receipts and message rows.
  • The typing indicator no longer nudges the timeline; long drafts and
    edits scroll inside the composer with the caret kept visible; editing
    starts at the end of the message.
  • The circular Lightning logo ships as SVG where vectors are supported;
    upload-limit preflight uses only the server's advertised limit.

Fixed

  • Composer text past ~6 lines was invisible (no scrolling existed).
  • The same user could show three different fallback-avatar colours
    across surfaces.
  • Send failures now surface in the room they happened in, not whichever
    room is open.
  • A stale room could keep refetching mention suggestions indefinitely.

Known issues and limits

  • Two timeline QML suites still assert the pre-0.6.6 virtualized
    contract (timeline-pane-qml 37 passed / 26 failed,
    timeline-hydration-qml 5 / 2) — carried, disclosed, and the
    highest-value open test work. All other suites pass on both build
    configurations (93/95 registered suites green).
  • macOS: built and validated as an unsigned arm64 test bundle on real
    Apple hardware in the release pipeline, but not published — macOS
    packages wait on code signing. Linux (deb, rpm, Flatpak, AppImage,
    snap) and Windows (x86-64 portable + installer) packages are published
    and validated on clean systems.
  • Interface zoom requires an app restart to take effect (Qt platform
    limit).
  • Unban is unreachable in rooms at or over the 500-row roster snapshot
    cap.
  • Element interoperability of provider GIF sends, sent video posters,
    QR verification and voice messages has not been re-validated for this
    release beyond automated coverage.