Releases: Mizerd/lightning
Release list
Lightning 0.7.6
This is a read-only mirror. It is not a release authority.
The canonical Lightning 0.7.6 release lives on GitLab:
https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.7.6
The files attached here are byte-identical copies of the artifacts published
there. They exist so downloads do not all have to come from one small server.
Nothing about this page decides anything: it does not determine what version
exists, what is installable, or what Lightning will accept.
Verify any download against the SHA256SUMS asset, which is itself a copy of
the published one.
Lightning's in-app updater fetches its update manifest only from GitLab and
verifies an Ed25519 signature made with a key that exists nowhere near 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://gitlab.smetonis.net/Mizerd/lightning
Lightning 0.7.5
This is a read-only mirror. It is not a release authority.
The canonical Lightning 0.7.5 release lives on GitLab:
https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.7.5
The files attached here are byte-identical copies of the artifacts published
there. They exist so downloads do not all have to come from one small server.
Nothing about this page decides anything: it does not determine what version
exists, what is installable, or what Lightning will accept.
Verify any download against the SHA256SUMS asset, which is itself a copy of
the published one.
Lightning's in-app updater fetches its update manifest only from GitLab and
verifies an Ed25519 signature made with a key that exists nowhere near 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://gitlab.smetonis.net/Mizerd/lightning
Lightning 0.7.4
This is a read-only mirror. It is not a release authority.
The canonical Lightning 0.7.4 release lives on GitLab:
https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.7.4
The files attached here are byte-identical copies of the artifacts published
there. They exist so downloads do not all have to come from one small server.
Nothing about this page decides anything: it does not determine what version
exists, what is installable, or what Lightning will accept.
Verify any download against the SHA256SUMS asset, which is itself a copy of
the published one.
Lightning's in-app updater fetches its update manifest only from GitLab and
verifies an Ed25519 signature made with a key that exists nowhere near 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://gitlab.smetonis.net/Mizerd/lightning
Lightning 0.7.3
This is a read-only mirror. It is not a release authority.
The canonical Lightning 0.7.3 release lives on GitLab:
https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.7.3
The files attached here are byte-identical copies of the artifacts published
there. They exist so downloads do not all have to come from one small server.
Nothing about this page decides anything: it does not determine what version
exists, what is installable, or what Lightning will accept.
Verify any download against the SHA256SUMS asset, which is itself a copy of
the published one.
Lightning's in-app updater fetches its update manifest only from GitLab and
verifies an Ed25519 signature made with a key that exists nowhere near 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://gitlab.smetonis.net/Mizerd/lightning
Lightning 0.7.2
This is a read-only mirror. It is not a release authority.
The canonical Lightning 0.7.2 release lives on GitLab:
https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.7.2
The files attached here are byte-identical copies of the artifacts published
there. They exist so downloads do not all have to come from one small server.
Nothing about this page decides anything: it does not determine what version
exists, what is installable, or what Lightning will accept.
Verify any download against the SHA256SUMS asset, which is itself a copy of
the published one.
Lightning's in-app updater fetches its update manifest only from GitLab and
verifies an Ed25519 signature made with a key that exists nowhere near 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://gitlab.smetonis.net/Mizerd/lightning
Lightning 0.7.1
This is a read-only mirror. It is not a release authority.
The canonical Lightning 0.7.1 release lives on GitLab:
https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.7.1
The files attached here are byte-identical copies of the artifacts published
there. They exist so downloads do not all have to come from one small server.
Nothing about this page decides anything: it does not determine what version
exists, what is installable, or what Lightning will accept.
Verify any download against the SHA256SUMS asset, which is itself a copy of
the published one.
Lightning's in-app updater fetches its update manifest only from GitLab and
verifies an Ed25519 signature made with a key that exists nowhere near 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://gitlab.smetonis.net/Mizerd/lightning
Lightning 0.7.0
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-qml37 passed / 26 failed,
timeline-hydration-qml5 / 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.
Lightning 0.6.6
Lightning 0.6.6
A features and timeline release. Read receipts, QR device verification, and
server-side per-room notification rules are new; GIF saving was reworked so a
star means one thing everywhere; the GIF and emoji pickers became resizable and
now sit on the composer; and the room timeline was rebuilt from the ground up
without height virtualization. Platform coverage is unchanged from 0.6.5: Linux
and Windows x86_64, and every shipped build uses only the Rust Matrix backend.
Highlights
- Read receipts on the timeline. Element-style avatar chips show who has
read each message, with a "+N" overflow pill and a summary line for the
tooltip and screen readers. - QR device verification. When the other device can scan (Element X,
Element Web), Lightning displays an SDK-generated QR code; SAS emoji remain
available as the fallback throughout. This closes a 0.6.5 known limitation. - Per-room notification modes are now real server push rules. All messages
/ Mentions & keywords / Mute are stored in your account's push rules by the
Matrix SDK instead of only on this device. This closes a 0.6.5 known
limitation. - Saved GIFs — one star, one meaning, one place. Star a GIF anywhere, from
a provider tile or from a GIF in a chat, and it lands in the picker's
Saved tab. Every tile is tagged with where it came from. - Resizable pickers. The GIF and emoji pickers sit on the composer, scale
with the window, and can be resized by dragging the corner; both share one
remembered size that persists between sessions. - The room timeline was rebuilt without height virtualization. Every loaded
row is a real, measured item, so loading older history no longer needs the
view to be corrected at all. - Find-in-timeline highlights matches. Ctrl+F now marks every occurrence in
the message body and fills the one you are sitting on. - Same packages as 0.6.5: Linux
.deb/.rpm/Flatpak/AppImage/Snap and Windows
x86_64 portable ZIP, MSI, and setup EXE. Windows packages remain unsigned.
Read receipts
- Who has read a message. Up to four 16px avatar chips in a facepile,
plus a "+N" overflow pill, on the newest message each person has read. One
summary line ("Read by Alice, Bob and 3 others") drives both the tooltip and
the accessible name. - The strip is invisible and takes no space when nobody else has read the row,
and it trails the message content rather than a fixed column edge, so
chips sit beside short messages instead of floating in empty space. - Receipts are tracked by the Matrix SDK on live room timelines. Thread
timelines deliberately do not show them: SDK receipts are not thread-aware,
and enabling them there would attach unthreaded receipts to thread rows. - The "New messages" divider gained an explicit policy alongside this: it stays
collapsed while you are pinned to the bottom of a room and renders only for a
reader who is genuinely catching up. - Your own receipt and the sender's implicit receipt are excluded, so a message
never reports that its own author read it.
Device verification: QR
- Show a QR code. When the other device can scan, the verification card
displays a QR code generated by the Matrix SDK. Scanning runs the SDK's
reciprocate handshake, you confirm the other device's success explicitly, and
nothing is auto-confirmed. - Lightning never scans — there is no camera path — and never advertises
itself as a scanner. SAS emoji verification remains available throughout as
the fallback, and an unscanned code times out and falls through to it. - All trust-affecting steps remain SDK calls. Only the QR module grid crosses
the FFI boundary; the payload bytes never leave the SDK and are never logged
or persisted. Signing out cancels a displayed code on the wire.
Notifications
- Per-room modes are your account's push rules. On the Rust backend, All
messages / Mentions & keywords / Mute are managed entirely by the Matrix SDK
as server push rules, so a room you muted stays muted on your other clients
and devices. Lightning never builds or inspects rule JSON itself. - Every surface that sets a mode — the room-menu flyout, Room Information, and
Settings — states which behaviour you are getting: saved to your account,
kept on this device after a server failure, or device-local on backends that
do not support push rules. - Changes apply instantly and offline through a local cache, then write to the
server. A failed write is disclosed rather than swallowed, and a
server-resolved account default is never written over a mode you chose. - Modes are now stored per account, so two accounts no longer share one room's
setting. Existing settings continue to work.
Saved GIFs
- One star, one meaning. Previously the same star did different things in
different places — bookmarking a provider GIF in one, copying a chat GIF to
disk in another, with a third meaning on a separate tab. A star now means
"save this GIF", with one destination: the picker's Saved tab. - The picker's navigation collapsed into one row of peers: the sources (GIPHY,
KLIPY) and, past a divider, the two lists that were always cross-provider
(Saved, Recent). Picking a provider and then Favorites can no longer show
another provider's list. - Star a GIF from a chat. A star button appears when you hover a GIF in the
timeline, in the bottom-right corner, and fills when saved. - Every tile is tagged with where it came from — GIPHY, KLIPY, or Local — which
also keeps provider credit attached to the tiles it belongs to. - What is stored, and where. A provider GIF is saved as a link. A GIF saved
out of a chat is copied to your device, because that is the only way to keep
one from an encrypted room. Those bytes live in an account-scoped store on
this machine only — never in server-side account data — bounded at 200 items
and 64 MiB, content-addressed and deduplicated. - The store records only the content hash, size, dimensions, and when you saved
it. The room, event, sender, and media key are deliberately not kept. - It is deleted when you sign out of that account and when the account is
removed; switching accounts never touches the outgoing account's files.
Settings → Privacy & security shows the current count and size and offers a
confirmed Clear All. - The cap is honest: reaching it refuses the save and says so, rather than
silently evicting something you chose to keep.
Pickers
- Pinned to the composer. The GIF and emoji pickers are positioned relative
to the composer card itself, so they cannot lag, drift, or snap back when the
window is resized. They sit just above the text box and never extend past its
right edge. - Resizable. Drag the corner — marked with a quarter-arc in the accent
colour — to resize either picker. - Sized as a share of the window, never a fixed pixel count, so a picker
scales continuously as the window changes and a size chosen on one display
stays sensible on another. - Both pickers share one remembered size, and it persists between sessions.
A size stored out of range is forgotten rather than clamped, so a corrupted
setting can never hand back a size you did not choose. - Saving a GIF no longer shows a banner that pushed the timeline up and let it
drop back; the star filling in place is the feedback. Failures still say so.
Timeline and scrolling
- Rebuilt without height virtualization. Every loaded row is now a real
instantiated item with a measured height, in one column inside a rotated
flickable. Older history is appended at the tail, so nothing already on
screen can move and loading history needs no scroll correction at all. - This replaces a mechanism where the application computed positions from
estimated heights while the reader saw real ones — the source of a long tail
of scroll defects — and where a single insert anywhere in the model released
and rebound every visible row. - Backward pagination arrives as one page. The SDK emits a page as many
individual diffs; the bridge now assembles them and delivers one atomic
range, so the view, the pagination gate, and grouping each see a page as a
page. Overlapping and misattributed requests are gone. - Scrolling no longer degrades as you read back. Grouping is refreshed only
around the change instead of across the whole model, which previously
re-measured hundreds of unrelated rows on every page. - A single wheel frame is capped below one viewport, so a long frame — the
kind a landing page of history causes — can no longer discard the row you
were reading and guess a replacement. - Rows are paced as they are built so that a large page cannot freeze the
application in one event-loop turn; live messages are exempt. - A 20px gutter now separates the room-list divider from the message
avatars.
Other improvements
- Find-in-timeline highlighting. Ctrl+F marks every occurrence in the
message body and fills the current match in the accent colour, so stepping
through with the arrows shows which one the view landed on. Message bodies
are rich text, and the highlighting only ever substitutes inside text runs —
markup and HTML entities are never split. - Read-receipt avatars load correctly rather than falling back to initials
permanently. - Reply and search navigation can address any loaded row, including rows still
being paced onto the screen. - Screenshot-demo mode (development only) can now photograph the GIF picker
from bundled fixtures, defaults to the Storm theme, and has fuller fictional
conversations. The README screenshots were recaptured from it.
Downloads
Linux
- Debian/Ubuntu package (
.deb) - Fedora/RHEL package (
.rpm) - Flatpak bundle (
.flatpak) - AppImage (
.AppImage) - Snap package (
.snap)
Windows x86_64
- Portable package (
.zip) — extract and run ...
Lightning 0.6.5
Lightning 0.6.5
A design, scrolling, and correctness release. The new Storm design language
restyles every menu, picker, and dialog in the client and arrives as a
selectable application theme; reading-position handling while scrolling through
history was overhauled end to end; and device verification and account-store
handling received significant correctness fixes. Platform coverage is unchanged
from 0.6.4: Linux and Windows x86_64, and every shipped build uses only the
Rust Matrix backend.
Highlights
- The Storm design language across the entire menu system: redesigned
menus, popovers, pickers, and dialogs with keycap accelerators, section
labels, and the bundled Space Grotesk brand face. - Storm as a full application theme — deep navy panels with a bolt-yellow
accent, first in the theme picker. Existing theme choices are untouched, and
a new ink-on-accent token fixes contrast defects app-wide. - Redesigned message and room context menus: a keyboard-operable
quick-reaction strip, keycap accelerators, a per-room notifications flyout,
Copy room link, and a confirmed Leave room action. - A major scrolling and reading-position overhaul: loading history no
longer teleports the view, image pop-in no longer throws the reader, wheel
glides survive pagination, and the storm of redundant history requests near
the top of a room is stopped. - Display names resolve everywhere: mentions, reply headers, and thread
summary cards now show real names instead of raw Matrix IDs. - Device verification fixes: Lightning now initiates verification (it sends
m.key.verification.start) instead of waiting in Ready — the cause of
verification with Element X stalling — and the SAS (emoji) flow now handles
either side initiating. - Each account is now bound to the SDK store it actually uses, ending a
class of permanent sign-in failures — and cleanup can no longer delete the
wrong account's crypto store. - Same packages as 0.6.4: Linux
.deb/.rpm/Flatpak/AppImage/Snap and
Windows x86_64 portable ZIP, MSI, and setup EXE. Windows packages remain
unsigned.
The Storm design language
- One language for every menu surface. The shared menu system was
redesigned from the ground up — menus and menu items, keycap accelerators,
section labels, and new shared primitives — and applied across the message
menu, room menu, account switcher, quick switcher, emoji and GIF pickers,
mention popup, member profile, the new-conversation, invite, and poll
dialogs, and the Settings shell. - Storm as a selectable theme. The eleventh full-application theme: deep
navy panels and a bolt-yellow accent, first in the theme picker. The System
theme resolves dark to Storm and light to Moss Light. Persisted theme
choices are never rerouted — nobody's stored selection changes — and the
legacy themes keep their own semantic menu tones rather than inheriting
Storm's literals. - Readable ink on accent fills. A new
boltInktoken governs text drawn
on bolt/accent fills app-wide; some previously broken pairs went from
roughly 1.0:1 contrast to between 8.7:1 and 13.7:1. - Redesigned context menus. The message menu gained a six-cell,
keyboard-operable quick-reaction strip and keycap accelerators (R, T, E,
Ctrl+C). The room menu gained a notifications flyout with real per-room
mode radio rows, a canonical-alias-aware Copy room link, and a confirmed
danger action for Leave room. - Redesigned pickers and popups. The emoji picker has an 8-column grid,
a compact category rail, and recents; the GIF picker shares the same search
treatment with section chips and keyboard Space activation; the mention
popup is now a menu surface. - Identity and trust surfaces. The account switcher shows vertical
identity cards with live space counts; a Trust card bound to real
crypto-health state appears in the switcher and embedded in Settings →
Sessions; the member profile popover was redesigned and gained Copy ID. - Quick switcher and dialogs. The quick switcher was rebuilt with
navigate and command modes and scope chips; the new-conversation omnibox
and the invite-people and create-poll dialogs use the shared dialog
language; the Settings shell is searchable, with featured theme cards. - Brand marks and type. The Lightning wordmark and bolt mark appear in
the room-list header and boot screen; the room-list search and the in-room
find bar were rebuilt as composer-family cards, with the room-list search
carrying a Ctrl+K keycap hint; the Space Grotesk brand font (OFL) is
bundled.
Scrolling and reading position
- Your place survives history loading. One scroll anchor is kept alive
across a near-top multi-batch loading run, and the view no longer jumps to
the anchor row on every backfilled batch — fixing a cascade that could
teleport the reader to the top of history. - Wheel glides survive pagination. Restoring the anchor after a page of
older messages no longer discards concurrent scrolling or freezes an
in-flight wheel glide, and a new upward gesture keeps history loading. - Image pop-in no longer throws the view. Content growth above the reader
is compensated while a self-driven scroll is in flight. - The near-top loading storm is stopped. History loading now uses real
distance-from-top proximity, gates on progress at dispatch, and accounts
for model growth per page — stopping the storm of redundant, overlapping
history requests it previously fired while scrolling up near the top of a
room. - One preservation mechanism. Reading-position preservation was unified
into a single mechanism, and a displaced anchor's shift is computed directly
instead of rebuilding the row to measure it. - Constant-time thread roles. Per-row thread-role queries are answered
from an index instead of scanning the timeline, so scrolling no longer
degrades as loaded history accumulates. - The thread panel holds its place too. Thread pagination gained its own
scroll anchor, so loading older thread replies no longer teleports the
panel.
Messaging and display improvements
- Display names resolve everywhere the member roster knows them: mentions,
reply headers, and thread summary cards use the member cache, which was
previously left unpopulated on the Rust backend. The roster hydrates on
room open, so mention chips resolve without first opening the member panel. - Reply-quote and thread previews normalize Lightning-sent mentions to
display-name labels instead of rawmatrix.tomarkdown. - Reply cards are content-width with an accent bar; mention highlighting is
quieter — a tint with a left edge bar, bolt-colored for personal mentions
and neutral for @room; your own reactions get a ring; the selected room
shows a bolt edge. - The GIF picker sends exactly the GIF you picked: never a re-resolved row
after a model refresh, a debounced search can no longer send the previous
query's result, and a double-click sends one GIF instead of two. - Overflow and containment defects across the redesigned surfaces were fixed,
the Settings navigation rhythm was tightened, and account and session cards
adopted the trust-card language.
Verification and account-store fixes
- Lightning now initiates verification. It sends
m.key.verification.startinstead of waiting in Ready for the other side —
the cause of verification with Element X stalling. A leaked single-flow
slot can no longer brick outbound verification for the session, QR is no
longer advertised when Lightning cannot answer it (SAS only), and failures
are surfaced instead of invisible. - SAS completes in both directions. Emoji verification now completes
whether Lightning or the other device initiates, and flows tear down
cleanly on logout and cancellation. - Each account is bound to the SDK store it actually uses. The store
location is recorded when the store is opened, never re-derived — so a
mismatch between the name typed at login and the server-canonical user id
can no longer make sign-in fail forever, and cleanup can no longer delete
the wrong account's crypto store. Suspect stores are quarantined, never
deleted on a guess, and a locked keyring is treated as a transient
credential failure rather than evidence that an account does not exist. - Sanitized support diagnostics. A support-diagnostics export — offered
from the sign-in screen's repair panel when a session-store failure is
detected — carries hashed account identifiers with a fresh per-report salt,
no filesystem paths, and no tokens. - Verification trust semantics are unchanged: trust labels still come from
SDK state, and nothing in this release promotes local UI confirmation to
SDK trust.
Downloads
Linux
- Debian/Ubuntu package (
.deb) - Fedora/RHEL package (
.rpm) - Flatpak bundle (
.flatpak) - AppImage (
.AppImage) - Snap package (
.snap)
Windows x86_64
- Portable package (
.zip) — extract and runLightning.exe; no installation. - MSI installer (
.msi) — per-user install. - Setup EXE installer (
-setup.exe) — per-user install.
macOS is not supported.
Rust-only backend
Release builds compile only the official Matrix Rust SDK backend. The HTTP and
mock development backends are excluded from the shipped binary, --backend=http
and --mock are rejected, and there is no silent fallback. matrix-client --build-info reports the backend and build invariants for verification.
Windows signing notice
The Windows packages are currently unsigned.
- Windows may show an "Unknown publisher" prompt, and Microsoft Defender
SmartScreen may warn before running the installer or executable. - The warning does not by itself mean the file is unsafe. Download Lightning
only from the official GitLab release, and verify the SHA-256 checksum below. - Do not disable SmartScreen, antivirus, or Wind...
Lightning 0.6.4
Lightning 0.6.4
A scrolling, performance, and visual-polish release. Timeline scrolling on a
touchpad is steadier, near-top history loading no longer loops, and the client
does less redundant work while you scroll. Shared timeline components — message
width, media, polls, and code blocks — are refined. Platform coverage is
unchanged from 0.6.3: Linux and Windows x86_64, and every shipped build uses
only the Rust Matrix backend.
Highlights
- Touchpad timeline scrolling is steadier: the view no longer fights the
touchpad or gets pulled around while avatars, media, and history load. - Backward pagination near the top of a room no longer loops on
zero-progress history requests, and its loading indicator no longer nudges
the viewport. - Less redundant work while scrolling: cached avatars are not re-resolved on
every continuation row, and the high-frequency media-cache logging that ran
on the UI thread during scrolling is gone by default. - Visual refinements to the timeline: a readable maximum message width on wide
windows, rounded in-process media, clearer poll result bars, and subtly
styled inline and fenced code. - A refreshed README with a screenshot gallery, and new development-only
screenshot tooling (excluded from release binaries — see Developer tooling). - Same packages as 0.6.3: Linux
.deb/.rpm/Flatpak/AppImage/Snap and
Windows x86_64 portable ZIP, MSI, and setup EXE. Windows packages remain
unsigned.
Scrolling and timeline performance
- Steadier touchpad scrolling. Deferred scroll-anchor corrections no longer
write the scroll position in the middle of an active touchpad gesture, so the
view stays where you put it instead of competing with the touchpad — the
effect was worst near the top of history and over media. The Flickable is
pinned to its bounds so a gesture cannot overshoot. - Bounded near-top pagination. Loading older messages near the top of a room
is now edge-triggered with hysteresis and a bounded, controller-owned
continuation, so a page that adds no visible rows (for example when threaded
events are filtered out) no longer spins in a tight loop against the
homeserver. - Stable loading indicator. The "loading older messages" / failure indicator
moved out of the scrolling content into a top overlay, so toggling it no
longer changes the content height and shoves the reader's position. - Fewer relayouts while paginating. The timeline's grouping refresh is
coalesced during a backward page, so a page of older messages triggers one
grouping update instead of one per inserted row. - Less repeated resolution work. A sender's continuation rows reuse an
already-cached avatar instead of re-running avatar resolution on every cache
completion, and the per-row media/avatar cache-hit logging is now off by
default.
Visual improvements
- Message, media, and mention rows are capped at a readable maximum width on
wide windows instead of stretching edge to edge. - In-process media (images and video posters) is rounded, with the corner
radius baked into the decoded bitmap. - Poll result bars are taller, fully rounded pills with clearer emphasis on the
selected option and a clean empty track for options with no votes. - Inline and fenced code has a subtle themed background.
Developer tooling
Lightning gained a development-only screenshot-demo mode for producing
deterministic UI screenshots from fictional *.example accounts and locally
generated media, with no network and no real credentials. It is compiled in
only with the LIGHTNING_ENABLE_SCREENSHOT_DEMO CMake option (off by default),
which is mutually exclusive with the release build configuration.
This mode is not part of any release binary and is not an end-user feature.
Release builds report screenshot_demo_compiled: false in
matrix-client --build-info, and --screenshot-demo and every --demo-*
option are rejected. See docs/screenshot-demo.md.
The README was also rewritten as a project landing page with a screenshot
gallery captured from this demo mode.
Downloads
Linux
- Debian/Ubuntu package (
.deb) - Fedora/RHEL package (
.rpm) - Flatpak bundle (
.flatpak) - AppImage (
.AppImage) - Snap package (
.snap)
Windows x86_64
- Portable package (
.zip) — extract and runLightning.exe; no installation. - MSI installer (
.msi) — per-user install. - Setup EXE installer (
-setup.exe) — per-user install.
macOS is not supported.
Rust-only backend
Release builds compile only the official Matrix Rust SDK backend. The HTTP and
mock development backends are excluded from the shipped binary, --backend=http
and --mock are rejected, and there is no silent fallback. matrix-client --build-info reports the backend and build invariants for verification.
Windows signing notice
The Windows packages are currently unsigned.
- Windows may show an "Unknown publisher" prompt, and Microsoft Defender
SmartScreen may warn before running the installer or executable. - The warning does not by itself mean the file is unsafe. Download Lightning
only from the official GitLab release, and verify the SHA-256 checksum below. - Do not disable SmartScreen, antivirus, or Windows security to run Lightning.
- Code signing is not yet configured; these packages are provided unsigned.
Verification
- Every asset is listed in
SHA256SUMS. Verify a download with
sha256sum -c SHA256SUMSon Linux, orCertUtil -hashfile <file> SHA256on
Windows, and compare against the published value. - All assets are built from the exact
v0.6.4application commit; the full
source commit is recorded in each binary's--build-infooutput. - No GIF provider key setup is required — configuration is embedded at build
time and never printed by--build-infoor--gif-status. - The bundled Windows FFmpeg is an LGPL build (native decoders, no GPL or
nonfree components).
Known limitations
- The Windows packages are unsigned (see above).
- The scrolling and touchpad improvements are validated in automated tests at
the wiring and guard level; on-screen scroll feel should be confirmed on real
hardware. - Per-room notification modes remain device-local, not synchronized server push
rules. - End-to-end encryption cannot recover historical messages whose keys were
never backed up or shared.
Mirrored from the canonical release: https://gitlab.smetonis.net/Mizerd/lightning/-/releases/v0.6.4 — installation packages are hosted on GitLab:
- Lightning 0.6.4 — SHA-256 checksums
- Lightning 0.6.4 — Windows x86_64 setup EXE (unsigned)
- Lightning 0.6.4 — Windows x86_64 MSI installer (unsigned)
- Lightning 0.6.4 — Windows x86_64 portable (unsigned)
- Lightning 0.6.4 — Snap amd64
- Lightning 0.6.4 — AppImage x86_64
- Lightning 0.6.4 — Flatpak amd64
- Lightning 0.6.4 — RPM x86_64
- Lightning 0.6.4 — Debian amd64