Lightning 0.10.5
A memory and fixes release, and the first with ARM64 Linux packages. Lightning
uses less memory again, screen sharing works again on KDE Plasma with the
packaged builds, calls reach a call service your own homeserver runs on your
local network, calls survive a dropped connection without leaving, screen
shares stay sharp on a lossy network, spoiler images and videos arrive
blurred, and the message box has an optional Vim mode. Thanks to emmkay440
and f-o-o-g-s for their contributions.
Memory and speed
- Less memory again. On the same test rig and account as the 0.10.4 notes,
a build from partway through this round starts a restored session at about
525 MB of resident memory (0.10.4: about 615 MB), sits at about 685 MB after
50 room switches (about 805 MB), and at about 1150 MB after a long fast scroll
(about 1520 MB). Timeline rows now build their reply quote, reactions, read
receipts, sender avatar, status line and similar parts only when the message
has them, and Settings builds each section when you open it. - Link previews build only the state they show. On the test rig that is
about 65-80 MB less memory after scrolling, measured after the figures above. - Audio and voice message cards are much lighter while not playing: about
79 objects each, down from about 285 for an audio file and 364 for a voice
message. The speed menu and volume popup are built when you use them. - Idle large rooms let go of their member lists' avatars (display names are
kept), and Lightning holds 32 MiB of media in memory instead of 64; the rest
is read back from the encrypted media store on disk, not downloaded again. - Name colours no longer poll the server. Lightning asked for the profiles
of recently seen people every 20 seconds, about 70 requests a minute while
idle. It now asks once per person, again when their membership changes, and
refreshes names on screen every five minutes. - A message's menu and dialogs are released when its row leaves the screen.
- Fewer repeated media downloads. A picture handed to the screen is kept
until it has been drawn, so a busy image decoder no longer loses pictures to
newer downloads and fetches them again, and speculative video downloads no
longer push pictures out of memory.
New
- Spoiler media (#69, MSC4193). Images and videos marked as spoilers
arrive blurred with a "Spoiler" label and are revealed with a click, Enter or
Space; the image viewer and the room's media browser never show one you have
not revealed. Mark an attachment as a spoiler before sending, in the room or
in a thread; forwarding keeps the cover. Cinny and Sable use the same marker. - Vim-style editing in the message box, off by default (Settings › Chat).
Esc enters Normal mode with the usual motions, operators and counts; Enter in
Normal mode sends. Works in the thread panel too. - Activity search and favourites. Ctrl+F or typing searches the Activity
dialog, Escape clears first, and a star limits it to favourite rooms. The
"All" chip and tab explain how rooms and activity are ordered. - Collapse a thread's first message to one line in the thread panel; the
choice is remembered. - Stream info for screen shares: codec, resolution, frame rate, packets
lost and resent, and keyframes, for your own share and a received one. - Rendered stable polls: polls sent with the stable
m.poll.starttype now
show and count votes like the older format. - A "Jump to the latest message and focus the message box" shortcut action
(unbound by default), and Ctrl+Shift+digit shortcuts that follow the physical
key on every keyboard layout. - Choose what the timeline shows. Settings has Show, On hover and Hide for
sender avatars, reactions and read receipts, and a switch for large
emoji-only messages. It applies to rooms, threads and jump-to-message views;
"On hover" also shows them on the message selected with the keyboard, and
hidden parts are not built at all. Hiding read receipts does not stop sending
your own; that stays under Privacy. - The room list's unread marker reads as a button again. The thin bar
0.10.4 introduced now carries an arrow, and opens into the labelled
"Unread above" / "Mention below" pill under the pointer or keyboard focus. - Sending from up in history. A reply keeps your place, so several
messages can be answered in a row. Whether a plain send takes you to the
newest message is now a setting, "Go to the newest message when I send"
under Chat · Timeline, on by default. - Choose where the unread dot shows. Settings → Notifications → "Unread
dot": all rooms, only rooms with notifications on (the new default), or
never. Muted rooms never show it; mention badges stay in every mode. - Mark all rooms read automatically, every 15, 30 or 60 minutes or a time
you choose (off by default). It skips the room you have open and follows
your read-receipt privacy setting. - Searchable fonts. The font pickers in Settings have a search field that
filters the list as you type. Contributed by emmkay440 (#66). - Sticker search and pack chips. The sticker picker opens on a search field
that matches shortcodes and descriptions across every visible pack, and lists
packs as chips with their picture and name. The emoji picker uses the same
chips to narrow custom emoji to one pack. The picker's busy indicator no
longer covers its add button. - Single-key shortcuts. A global action can be bound to one key with no
modifier: a letter, digit, symbol, F-key or numpad key. Numpad keys are
distinct from the main keyboard (shown as "Num ."), so for example numpad
dot can mute. A character key on its own never fires while you are typing
in a text field. Navigation and editing keys on their own are still refused. - Album art is a Compact, Card or Large choice. Large fills the card's
width, the cover is cut to the tile's rounded corners, and a file with no
known cover no longer shows an empty square. - Smoother avatars. Avatars are decoded at the size they are drawn, so
their edges no longer look stair-stepped. Contributed by f-o-o-g-s.
Calls and screen sharing
- A dropped connection no longer kicks you out of a call (#70). Lightning
resumes the same call session instead of rejoining, so the others no longer
see you leave and come back. - Screen shares stay sharp on a lossy network (#68). Lost video packets are
now resent, and a gap freezes the picture until a fresh frame arrives instead
of decoding coloured blocks. - Screen sharing works again on KDE Plasma with the AppImage and Flatpak
(#63). The GStreamer PipeWire plugin those packages bundle could not follow
KWin's GPU (DMA-BUF) capture format, and the share ended with "unhandled
format". Those packages now start a share in system memory, and a share that
cannot negotiate its capture is retried once in the other memory type, so a
compositor that only offers GPU capture (niri) still works. - A call service on your own network works (#64). When your own homeserver
advertises a call service that resolves to a private, Tailscale or IPv6 ULA
address (split-horizon DNS, for example), Lightning now connects to it. A
call service named only by other room members is still held to public
addresses. IPv6-only networks with NAT64 (64:ff9b::/96) reach public call
services, and a refused call service now says why (private name, unresolved,
timed out, unroutable) instead of "invalid transport". - The call button shows in the room restored at startup (#67), without
switching rooms first. - When a call participant's media key cannot be decrypted, the log names the
likely cause. - The call banner shrinks in a narrow window so Try again stays visible.
Messages and the timeline
- Messages are sent in the order you typed them. Rapid sends in one room or
thread could reach the server, and show locally, out of order. Each room and
thread now has one ordered send queue. - Jumping to an older message opens a view that scrolls like the timeline,
loads more in the direction you scroll, and has a bar you can close. - The audio and subtitle track you pick in a video's menu now sticks.
- Repeated PageUp and PageDown extend the scroll already under way.
- The timeline keeps your place when an older page arrives while you are
scrolling at the top. - A failed
/joincommand says so in the composer and the thread composer. - Switching a draft from rich text back to Markdown no longer adds blank lines
at its end. - The voice message preview clock no longer shifts as its digits change.
Rooms, Spaces and invitations
- Accepting an invitation from the room list opens the room. The Classic
layout's invitation menu offers Accept and Reject whoever sent it. - The "Part of" Space banner explains itself, and dismissing it is remembered
per account and Space. - A lost room membership is noticed within about 5 seconds instead of 30.
- A room creator's profile pill reads Creator.
- A back press that closes a menu no longer also goes back to the previous
room.
Settings, accessibility and languages
- Right-to-left languages mirror the main window's panes, the search field's
padding and the room list's filter chips. - The recovery key card has a heading, so the Settings outline and search can
find it. - When the keyring stops returning a saved sign-in, Lightning says it may be
locked. - A long account ID in the account row is no longer cut off beside a large
unread badge. - Translations were resynced; new strings are in English until translated.
Fixes
-
The hover toolbar no longer covers an audio, voice or video card's own
buttons; on media it sits above the message. -
A video's audio and subtitle choice now shows in its menu and survives a
replay, and subtitles sit above the control bar. -
A single-key numpad shortcut works on Linux, and never fires through an open
menu or dialog. -
Opening Activity with its plain shortcut or button always starts on "All".
-
The call header never shows a raw room ID.
-
A room whose history the server had not fetched yet could stop at
"Beginning of conversation" well after the start; Lightning now asks the
server once more before believing it. -
An open thread refills after its room's history is reloaded.
-
Channels offers "Mark as read" for quiet rooms that still count unread.
-
A room could keep its unread dot with nothing new to read when the last
thing in it was a poll's end; the read receipt now covers it. -
History older than your join loads again. After joining a room over
federation, Lightning could take the server's first empty answer as the
start of the room and show "Beginning of conversation" at your own join for
good. It now asks the server once more before believing that start. -
A tray icon click no longer raises the window for another application's
notification action (#61). -
An
.mp4or ASF (.wmv,.wma) attachment is sent with its real media
type.
Updates
- When GitHub and Lightning's own server do not answer, the updater falls back
to a copy on gitlab.com. Every file is still checked against the signed
manifest's SHA-256 and size, and a manifest whose signature does not verify
now stops the update from every source instead of moving on to the next.
Packaging
- First ARM64 Linux packages. This release adds aarch64 builds as
.deb
for Debian and for Ubuntu,.rpm, AppImage and snap. They are optional
download assets: the in-app updater does not offer them, and a release can be
published without one if it fails to build. Install and update them by hand. - The Linux and Windows packages are now built and validated on gitlab.com's
hosted runners, with the same scripts and pinned build images as before.
Signing, publishing and the macOS build stay where they were.
Correction to the 0.10.4 notes
The 0.10.4 notes said scrolling through images used 13-20% more CPU than
0.10.3. That figure came from one three-run comparison. A run of the same two
builds earlier that day showed image scrolling using about 15% less CPU, and
the comparison harness was later found to start the two builds in a fixed
order on fixed slots. There is no reliable measurement that 0.10.4 uses more
CPU than 0.10.3 when scrolling images, and a build from this round measured the
same as 0.10.4 on the test rig.
Known limits and not yet tested
- ARM64 packages are NOT TESTED on real ARM hardware. They are built and
pass the same automated package checks as the x86 packages, on ARM runners. - The screen-share fix (#63) and the local call service fix (#64) are NOT
TESTED live on the reporters' setups. NAT64 is NOT TESTED live. - The updater's gitlab.com fallback has not been exercised by a real outage.
- "Media from someone here cannot be decrypted" in a call still has no
automatic recovery. Leaving and rejoining the call may help. - Hardware encoding stays opt-in (
LIGHTNING_SHARE_ENCODER=hardware). Only
use it when everyone watching runs 0.10.3 or newer. - macOS calls are NOT TESTED.
- Editing a message with mentions, custom emoji, lists or spoilers opens it as
plain text; changing the text loses that formatting. An unchanged save is safe. - Memory after much scrolling stays well above idle: every loaded message is a
live row. Memory was measured on a software-rendered test rig; a real GPU, a
real large account and the packaged builds are NOT TESTED. - This release was checked by automated tests and by scripted interface runs of
every new feature on NixOS, the Flatpak and Windows 11, with calls on a real
homeserver. A call that resumes after a dropped connection was tested on
Linux only; Element, Element Call and Sable as the other side of a resumed
call or of the new screen-share recovery are NOT TESTED. - Windows packages are unsigned.
Lightning 0.10.5 is published here on GitHub. The release assets are
built and validated on clean systems by the project's packaging pipeline and
uploaded unchanged.
Verify any download against the SHA256SUMS asset.
Lightning's in-app updater reads a signed update manifest (published as the
update-latest release on this repository) and verifies an Ed25519 signature
made with a key that is not stored on GitHub. Every downloaded file is checked
against the SHA-256 recorded in that signed manifest before it is installed, so
replacing a file here cannot cause Lightning to install it.
Issues, source, and history: https://github.com/Mizerd/lightning