Repository navigation
Releases
link2linux 0.4.0
Photos, screen mirroring with control, ARM64 builds and a Flatpak.
Added
- Photos. The Photos page shows the newest 200 photos the phone's camera
took and its screenshots. Open one to see it large and save it into your
Pictures folder. Photos is off on the phone until you turn it on, and it
asks for access to your photos only then; on Android 14 and later you
can share only the photos you pick. The computer keeps thumbnails and
photos in memory only, never on disk, until you save one. - Screen mirroring. The Screen page shows your phone's screen. The phone
asks you each time before it shares, and you can stop it from either
device. With an H.264 decoder for GStreamer installed, such as
gstreamer1.0-libav, the video is smooth; without one it comes as a
series of still pictures, about 12 a second. - Control your phone from the computer. Turn on "Allow control from your
computer" in the phone's screen settings, and link2linux control in
Android's accessibility settings when it asks, to
tap, swipe, scroll and type on the phone from the Screen page, and to
use Back, Home, Recents and the notification shade. It works only while
you share the screen with that computer. - Desktop builds for 64-bit ARM computers: a .deb, an .rpm and an
AppImage. The install script picks them by itself on an ARM computer. - The desktop app as a Flatpak bundle, for x86 and ARM. Install it with
flatpak install --user ./link2linux.x86_64.flatpak, or with the install
script's--flatpak. It runs in Flatpak's sandbox, where it can reach
only your Downloads and Pictures folders. It keeps its own pairing, so
pair your phone again after switching to it from a package.
Known limitations
- Photos, screen mirroring and control have not been tried on many phones
yet. - Photos lists still pictures only, not videos.
- Screen mirroring carries no sound.
- On Android 13 and later, Android blocks the accessibility service of an
app installed from a file until you allow its restricted settings: open
the app's info, then the three-dot menu, then "Allow restricted
settings". The phone's screen settings explain how. - Typing into a password field from the computer works only into an empty
field, or one holding just what you typed from the computer. - The Flatpak, like the AppImage, comes without the firewalld and ufw
profiles that the .deb and .rpm install. Where a firewall blocks the
phone's announcements, allow mDNS (UDP 5353) and UDP port 27381 yourself.
Install
Linux desktop, 64-bit x86 or ARM
Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere, for your computer's
architecture:
curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.4.0 shOr download a package below. For x86 PCs: link2linux_amd64.deb,
link2linux.x86_64.rpm, link2linux-x86_64.AppImage (which needs FUSE 2) or
link2linux.x86_64.flatpak. For ARM computers: link2linux_arm64.deb,
link2linux.aarch64.rpm, link2linux-aarch64.AppImage or
link2linux.aarch64.flatpak. Install a Flatpak bundle with
flatpak install --user ./link2linux.x86_64.flatpak; it takes the GNOME
runtime from Flathub.
Android phone, 8.0 and newer
Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.
Then open link2linux on the desktop and scan the QR code it shows with the
phone.
Verify
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linuxWhat's Changed
- Point the website at 0.3.0 by @codesensei-tushar in #239
- Add the photos and screen protocol by @codesensei-tushar in #240
- Build ARM64 packages and Flatpak bundles in releases by @codesensei-tushar in #241
- Share the phone's recent photos with the desktop by @codesensei-tushar in #242
- Show and control the phone's screen on the desktop by @codesensei-tushar in #243
- Share and control the phone's screen from the Android app by @codesensei-tushar in #244
- Fix the photos review findings on the phone by @codesensei-tushar in #245
- Fix the screen review findings on the desktop by @codesensei-tushar in #246
- Show the phone's recent photos on the desktop by @codesensei-tushar in #247
- Fix the screen review findings on the phone by @codesensei-tushar in #248
- Fix the photos review findings on the desktop and remember saved photos by @codesensei-tushar in #249
- Release 0.4.0 by @codesensei-tushar in #250
Full Changelog: v0.3.0...v0.4.0
link2linux 0.3.0
Phone status, ring my phone, and calls over Bluetooth.
Added
- Phone status. The computer shows the phone's battery level, whether it
is plugged in, battery saver, its mobile and Wi-Fi signal, and whether it
is set to silent, vibrate or Do Not Disturb. The phone shares it without
asking for any permission, and nothing in it tells where the phone is.
Hide it in the computer's settings, or turn it off on the phone. - Ring my phone. "Ring phone" on the computer makes the phone ring at full
volume for a minute, even when it is set to silent, until you stop it on
either device. It keeps ringing if the connection drops, so you can still
find it. - Calls. Take and make the phone's calls on the computer, with its
microphone and speakers, over Bluetooth. The Calls page pairs the two
over Bluetooth with a code you confirm on both, then shows incoming and
ongoing calls with answer, decline, hang up and a keypad, and has a dial
pad. An incoming call pops up on the computer, naming the caller only
when notification text is on, and the phone's own call notification is
shown only once. Turn calls off on the computer to keep
them on the phone. Media audio stays on the phone.
Changed
- Phone status, ringing and calls are on from the start on the phone,
because they share none of your content. You can turn each one off.
Every other feature still starts switched off.
Removed
- The Messages placeholder pages. Replies to texts already work from their
notifications.
Known limitations
- Calls need PipeWire 1.4 or later with its own Bluetooth backend, as in
Ubuntu 26.04; Ubuntu 24.04's PipeWire is too old. The Calls page says so
where calls can't work. - There is no mute button during a call yet: PipeWire's call control has
no mute. - Calls, phone status and ringing have not been tried on many phones and
Bluetooth adapters yet. Some phones report less status, for example no
network generation before Android 11.
Install
Linux desktop, 64-bit x86
Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:
curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.3.0 shOr download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).
Android phone, 8.0 and newer
Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.
Then open link2linux on the desktop and scan the QR code it shows with the
phone.
Verify
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linuxWhat's Changed
- Point the website at 0.2.0 by @codesensei-tushar in #226
- Add the phone status, ring and calls protocol by @codesensei-tushar in #227
- Show the phone's status on the desktop and ring it from there by @codesensei-tushar in #228
- Share the phone's status, ring it and help it pair for calls by @codesensei-tushar in #229
- Keep following the phone's status after a failed request, and show nothing until it reports by @codesensei-tushar in #230
- Fix the phone's notification IDs, alarm volume, status sources and blocked pairing prompts by @codesensei-tushar in #231
- Take the phone's calls on the desktop over Bluetooth by @codesensei-tushar in #232
- Repair the alarm volume after a reboot and around Do Not Disturb, and unset failed status parts by @codesensei-tushar in #233
- Keep every phone's calls answerable and guard call actions on the calls page by @codesensei-tushar in #234
- Keep focus, selection and card order steady on the calls page by @codesensei-tushar in #235
- Use only a Bluetooth device the user approved for calls, and keep other call alerts by @codesensei-tushar in #236
- Keep callers private in pop-ups, follow the phone's calls switch, and clean up calls on unpair by @codesensei-tushar in #237
- Release 0.3.0 by @codesensei-tushar in #238
Full Changelog: v0.2.0...v0.3.0
link2linux 0.2.0
Clipboard sharing and file transfer between the phone and the desktop.
Added
- Clipboard sharing. Text you copy on the computer lands on the phone's
clipboard. The phone sends its clipboard when you ask: in the app, from a
quick settings tile or the connection notification, or with "Copy to
computer" in the share sheet and the text selection menu. The computer
follows its clipboard in the background on GNOME, KDE, wlroots desktops
and X11, and elsewhere shares when its window is focused or when you
click Send. Passwords a password manager marks as secret stay on the
computer unless you turn on "Share passwords". Clipboard sharing is off on
the phone until you turn it on. - File transfer. Send files from the phone with "Send to computer" in the
share sheet, which always asks first, or from its Files screen; send
them from the computer by dragging them onto the window or with "Send
files". Received files go to Downloads on both devices. Each file is
checked against its SHA-256 before it is kept, a received name never
overwrites a file, and a transfer cut off by a lost connection resumes
where it stopped within the hour. Files are off on the phone until you
turn them on; Android 8 and 9 also ask for storage access.
Install
Linux desktop, 64-bit x86
Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:
curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.2.0 shOr download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).
Android phone, 8.0 and newer
Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.
Then open link2linux on the desktop and scan the QR code it shows with the
phone.
Verify
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linuxWhat's Changed
- Point the website at 0.1.2 by @codesensei-tushar in #212
- Share the clipboard: protocol, and copying between the phone and the desktop from the phone side by @codesensei-tushar in #213
- Read, write and watch the Linux desktop clipboard in the background by @codesensei-tushar in #214
- Share the clipboard from the desktop app by @codesensei-tushar in #215
- Fix the desktop clipboard review findings by @codesensei-tushar in #216
- Fix the Linux clipboard review findings by @codesensei-tushar in #217
- Keep reading while writing on the phone: one writer per session by @codesensei-tushar in #218
- Send files: protocol, and the phone side by @codesensei-tushar in #219
- Let held phone text win on focus-only desktops, and make clipboard reads wait for phone writes by @codesensei-tushar in #220
- Fix the phone file-transfer review findings by @codesensei-tushar in #221
- Send files from the desktop app by @codesensei-tushar in #222
- Fix the desktop file-transfer review findings by @codesensei-tushar in #223
- Ask before opening any received file that isn't a plain document, and tidy the last file-transfer edges by @codesensei-tushar in #224
- Release 0.2.0 by @codesensei-tushar in #225
Full Changelog: v0.1.2...v0.2.0
link2linux 0.1.2
Security fixes from a review of pairing, connections and notifications on
both apps, and fixes for crashes and for the phone not keeping to its
"Stay connected" switch.
Security
None of these was known to be exploited.
- Pairing: a forged message during a reconnect can no longer make the
computer think the phone removed it, and the phone's real refusal is now
recognised. Someone answering a QR code's announcement can no longer end
it. Pairing by code no longer replaces a phone with the same id without
asking. - Connections: both apps check a message's size and repeated fields
before decoding it, and keep messages small until the other side is
paired, so one message can no longer make either app use hundreds of
megabytes. The computer stops reading from a peer that does not read its
answers, keeps looking for phones after a flood of fake announcements,
and never dials its own addresses or a public address it last saw a
phone at. - Phone: its listener closes off Wi-Fi, Ethernet and hotspot networks, and
connections that have not yet proven who they are have time and number
limits. A removed computer is cut off before it is told. One paired
computer can no longer lock another out with a key change. - Phone notifications: another app's notification icon can no longer stall
or crash mirroring, and a computer that stops reading no longer holds up
the others. One-time-code detection catches letter-only codes and sign-in
links. Notification keys no longer carry contact details. A new setting,
"Reply while this phone is locked" (on by default), lets you require an
unlocked phone for replies and actions from a computer. - Computer: what the phone sends is held to the protocol's size limits;
pictures must be a PNG, JPEG or WebP of a sensible size before they reach
any image decoder, and their files are private to you. Pop-ups go out
under link2linux's own name. When the app cannot tell whether the screen
is locked, it treats it as locked, and locking takes the text off pop-ups
still on screen. The phones' presence keys are kept sealed with a key
from your keyring, and the pairing secret stays out of debug output. - Releases: the Android signing key never shares a machine with the build,
and every workflow action is pinned to a fixed version.install.sh
downloads over HTTPS only.
Fixed
- The phone app no longer crashes when its camera can't start, or when the
screen that offers to notice a nearby computer goes away. - With "Stay connected" off, the phone no longer opens its listener or
restarts its connection service when a paired computer comes near, and a
removed computer no longer wakes the app. - On a fresh install, the phone runs nothing in the background until the
first pairing starts.
Install
Linux desktop, 64-bit x86
Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:
curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.2 shOr download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).
Android phone, 8.0 and newer
Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.
Then open link2linux on the desktop and scan the QR code it shows with the
phone.
Verify
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linuxWhat's Changed
- Point the website's downloads at 0.1.1 by @codesensei-tushar in #195
- Keep the release signing key away from the build, and pin every action by @codesensei-tushar in #196
- Hold what the phone sends to the protocol's limits on the desktop by @codesensei-tushar in #197
- Keep pop-up text off a locked screen when the lock state is unknown by @codesensei-tushar in #198
- Close the phone's listener off local networks, and bound connections before they authenticate by @codesensei-tushar in #199
- Revoke a removed desktop before telling it, and keep pairings from claiming each other's keys by @codesensei-tushar in #200
- Trust only the phone's own refusal of this desktop's key by @codesensei-tushar in #201
- Keep the QR code up when someone else answers its announcement by @codesensei-tushar in #202
- Keep another app's images and a stalled desktop from holding up the phone's notifications by @codesensei-tushar in #203
- Seal the phones' presence keys with a key from the keyring, and keep the pairing secret out of debug output by @codesensei-tushar in #204
- Ask the phone only for what it offers, keep replies working while it's locked, and list the security fixes by @codesensei-tushar in #205
- Check a frame's size and repeated fields before decoding it, and stop reading from a peer that does not read by @codesensei-tushar in #206
- Keep browsing mDNS after a flood, and bound what forged announcements make the desktop keep and dial by @codesensei-tushar in #207
- Cap QR pairing connections, keep sealed presence keys sealed, and fix pop-up and mirror edge cases by @codesensei-tushar in #208
- Stop the image re-render spin and one-time-code false positives, bound every icon, and keep pairing screens from crashing by @codesensei-tushar in #209
- Free a sender stuck on a desktop that stopped reading, keep the phone to its off switch, and end pairing attempts on any error by @codesensei-tushar in #210
- Release 0.1.2 by @codesensei-tushar in #211
Full Changelog: v0.1.1...v0.1.2
link2linux 0.1.1
Keeps more of the phone's private content to the phone, makes the desktop app
share less with other programs on the computer, and lets the computer pair and
connect over the phone's own hotspot.
Added
- One-time codes stay on the phone. Notifications that look like they hold
a sign-in, payment or verification code, in English or one of thirteen other
languages, reach the computer as "One-time code hidden. Check your phone",
with no text, pictures or actions, on every Android version. They can still
be dismissed from the computer. "Keep one-time codes on your phone" on the
phone's Notifications screen turns this off; it is on by default.
Fixed
- The phone keeps listening, announcing and sending beacons while it hosts a
Wi-Fi hotspot, or USB or Bluetooth tethering, and has no other network, so a
computer that joins the phone's hotspot finds it.
Security
- The desktop's private key is in the keyring. The key that identifies the
desktop to your phones now lives in the system keyring (the Secret Service of
GNOME Keyring, KWallet or KeePassXC) instead of a file. A key from 0.1.0 moves
there on the first start, and its file is overwritten and deleted. Without a
keyring, the key stays in a file only you can read, as before. If the keyring
that holds the key is locked or not running, the app says so and offers to
try again, rather than making a new key that your phones wouldn't know. Once
the key has moved, 0.1.0 no longer finds it: going back to 0.1.0 means
pairing your phones again. - Pop-ups hide the notification's text. Desktop pop-ups pass through the
desktop's notification service, where other apps can read them, so a pop-up
now only names the phone's app and says "New notification". The whole
notification is in the link2linux window, which a click on the pop-up opens.
The new Settings page can turn the text back on. Even then, pop-ups never
show it while the screen is locked, and notifications the phone's app marked
secret get no pop-up at all on a locked screen. - Pictures stay off the disk. Pictures that come with notifications are
kept in your login session's runtime folder, which is cleared at logout, or
only in memory without one. The pictures 0.1.0 saved in its data folder are
deleted, and a phone's pictures are deleted when you unpair it. - The desktop app's memory is closed to other programs. Other programs you
run can no longer attach a debugger to the app or read its memory, and it
writes no core dumps. The window's web view runs in separate processes that
this doesn't cover.
Install
Linux desktop, 64-bit x86
Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:
curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.1 shOr download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).
Android phone, 8.0 and newer
Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.
Then open link2linux on the desktop and scan the QR code it shows with the
phone.
Verify
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linuxWhat's Changed
- Download the release files straight from the website's buttons by @codesensei-tushar in #185
- Keep the phone findable while it hosts a hotspot or tethering by @codesensei-tushar in #186
- Keep notifications that hold a one-time code on the phone by @codesensei-tushar in #187
- Show a notice on the desktop when the phone keeps a one-time code by @codesensei-tushar in #188
- Keep the desktop's private key in the system keyring by @codesensei-tushar in #189
- Hide the notification's text in desktop pop-ups by @codesensei-tushar in #190
- Add a settings page with a switch for pop-up text by @codesensei-tushar in #191
- Keep notification pictures off the disk and the app's memory private by @codesensei-tushar in #192
- Show why the desktop app couldn't start, with a way to try again by @codesensei-tushar in #193
- Release 0.1.1 by @codesensei-tushar in #194
Full Changelog: v0.1.0...v0.1.1
link2linux 0.1.0
The first release: an Android phone and a Linux desktop pair once, then find
each other on the local network by themselves, and the phone's notifications
appear on the desktop.
Added
- Pairing. Pair a phone by scanning the QR code the desktop shows. A phone
that can't scan pairs by comparing a six-digit code on both screens instead. - Finding each other. Once paired, the desktop finds the phone on the local
network through mDNS, or through the phone's own announcements where the
network filters multicast, and reconnects by itself after the phone sleeps
or changes networks. - Notifications. The phone's notifications appear on the desktop with their
action buttons. Reply to messages from the desktop: inside the notification
on KDE Plasma, and from the link2linux window elsewhere. Dismissing a
notification on the desktop dismisses it on the phone too; this dismiss sync
is on by default and can be turned off. Content that Android withholds from
other apps, such as one-time codes, shows as hidden rather than as
placeholder text. - Desktop app. Pages for pairing and notifications, and the connection
status of each paired phone. - Phone app. For Android 8.0 and newer. Each feature asks for its Android
permission only when you turn it on. - Downloads. A .deb, an .rpm and an AppImage for 64-bit x86 Linux, and a
signed APK, each with a SHA-256 checksum and a build provenance attestation,
plus a one-line installer for the desktop app.
Security
- Everything stays on the local network: no account, no server and no relay.
- Every connection is mutually authenticated TLS 1.3, with each device's own
P-256 key pinned at pairing. The QR code's one-time secret and the six-digit
code are bound to the TLS connection, so they can't be relayed to another
device. - The desktop never accepts incoming connections: it dials the phone, and only
addresses on its own local networks. The firewalld and ufw definitions that
come with the packages open only mDNS and the beacon port, and only once you
allow them.
Known limitations
- Messages, calls, photos, files, the clipboard and screen mirroring are not
in this release. - GNOME has no reply field inside notifications, so replies go through the
link2linux window there. - There are no ARM64 builds and no Flatpak yet.
Install
Linux desktop, 64-bit x86
Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:
curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.0 shOr download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).
Android phone, 8.0 and newer
Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.
Then open link2linux on the desktop and scan the QR code it shows with the
phone.
Verify
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linuxWhat's Changed
- Run CI jobs only for the parts of the repo a change touches by @codesensei-tushar in #1
- Add the protocol crate with types generated from proto/ by @codesensei-tushar in #2
- Add the length-delimited Envelope codec by @codesensei-tushar in #3
- Add the core crate with device identity and discovery types by @codesensei-tushar in #4
- Add pairing and transport types to core by @codesensei-tushar in #5
- Add the session Hello exchange to core by @codesensei-tushar in #6
- Add Ping/Pong liveness and the message loop to the session by @codesensei-tushar in #7
- Add notifications, messages, calls and clipboard stubs to core by @codesensei-tushar in #8
- Add photos, files and screen stubs to core by @codesensei-tushar in #9
- Add the platform crate: OS traits and Linux stubs by @codesensei-tushar in #10
- Add desktop frontend tooling: Vite, React, TypeScript, ESLint, Vitest by @codesensei-tushar in #11
- Add the Tauri v2 shell for the desktop app by @codesensei-tushar in #12
- Add design tokens, global styles and the Button component by @codesensei-tushar in #13
- Add the shared UI components: badges, cards, empty states, headers by @codesensei-tushar in #14
- Add the typed backend client and shared paired-device state by @codesensei-tushar in #15
- Add the pairing page with its empty state and pairing steps by @codesensei-tushar in #16
- Add placeholder pages for the seven remaining features by @codesensei-tushar in #17
- Add the app shell: sidebar navigation, routing and providers by @codesensei-tushar in #18
- Add the website foundation and its GitHub Pages deployment by @codesensei-tushar in #20
- Add the connection status area and a browser preview backend by @codesensei-tushar in #19
- Add the features grid and the how-it-works steps to the website by @codesensei-tushar in #21
- Add privacy, platforms, FAQ and a closing call to action to the website by @codesensei-tushar in #22
- Set up the Android Gradle build and a minimal app module by @codesensei-tushar in #23
- Add core/model and core/common as plain Kotlin modules by @codesensei-tushar in #24
- Add core/designsystem with the Material 3 theme by @codesensei-tushar in #25
- Generate protocol types from proto/ and add length-delimited framing by @codesensei-tushar in #26
- Add a session skeleton over a pinned TLS transport by @codesensei-tushar in #27
- Add Hilt and core/data with in-memory repositories by @codesensei-tushar in #28
- Add Navigation 3 and the pairing feature by @codesensei-tushar in #29
- List the features on the start screen and add the first feature modules by @codesensei-tushar in #30
- Add the photos, files, clipboard and screen feature modules by @codesensei-tushar in #31
- Remove the template Pages workflow that published the whole repository by @codesensei-tushar in #33
- Run checks locally with make ci and make the GitHub CI workflow manual-only by @codesensei-tushar in #32
- Add a download section with every package to the website by @codesensei-tushar in #34
- Add a one-line install script for the desktop app by @codesensei-tushar in #35
- Ship the desktop app as a .deb first on the website and in install.sh by @codesensei-tushar in #36
- Ship .deb, .rpm and AppImage for x86_64; keep Flatpak and ARM64 for later by @codesensei-tushar in #43
- Add a tag-triggered release workflow and the release checklist by @codesensei-tushar in #51
- Add session control, shared replies and pairing messages to the schema by @codesensei-tushar in #37
- Add the notifications feature to the schema by @codesensei-tushar in #38
- Record the pairing, discovery and message-pattern decisions by @codesensei-tushar in #39
- Start the v1 protocol spec: conventions, identity and discovery by @codesensei-tushar in #40
- Specify pairing in the protocol spec by @codesensei-tushar in #41
- Specify transport and session rules in the protocol spec by @codesensei-tushar in #42
- Specify message patterns, errors and versioning in the spec by @codesensei-tushar in #44
- Specify notifications and security considerations in the spec by @codesensei-tushar in #45
- Switch discovery to phone-sent beacons and ports below 32768 by @codesensei-tushar in #46
- Bind pairing to labelled exporters and add the pairing test vector by @codesensei-tushar in #47
- Tighten pairing: SAS attempts, records found by key, strict TLS chec...