Repository navigation
Linger v0.4.9
Linger 0.4.9: room for a raid, and every emoji
Voice holds a raid now: 60 people in a room, and when a dozen cheer at once
you hear the six loudest instead of a wall of noise. Every room sounds better
too, because a lost packet no longer cuts a voice out for everybody. The emoji
picker has every emoji there is, Discord's :shortcodes: work, and a host can
add the server's own. Rooms stop showing as new when you've read them, and a
person who dropped out of voice stops showing up there two or three times.
Hosts: update the server. The voice fixes, emoji and read positions all
need it. This one changes the database, so going back to 0.4.8 means
restoring the backup update.sh makes. A server with no voice address set
turns voice on after this update. For hosts has
the steps.
Everyone: update the app. A raid wants everybody in voice on 0.4.9.
Older apps keep sending silence, which costs the server, and when seven or
more people talk at once, an older app's voice is the first left out.
The highlights
- A raid fits in one voice room (#197). Up to 60 people, up from 25. Apps
send nothing while you're quiet, and the server passes on the six loudest
voices at once, so twelve people cheering when the boss goes down still
sounds like a crowd and doesn't swamp the server. - A lost packet doesn't stop a voice (#438). One packet lost on the way to
the server made that person go silent for about a third of a second, for
everybody in the room. That has happened in every voice room since 0.4.1. - Every emoji, and a server's own (#359). See Emoji.
- Rooms you've read stop looking new (#453, #454), on the phone after
it's been put away and on your other devices after you send something. - You show up in voice once (#451). A friend showed as "you, you, you"
in a room's voice, because connections that had dropped kept their seats.
Voice
- Sixty people a room (#197), up from 25. Your app sends nothing while
you're quiet, muted or not pressing push-to-talk, the way Discord's does. It
used to send fifty packets of silence a second, and the server copied every
one to everybody. - The six loudest voices (#197). However many people talk at once, the
server passes on the six loudest. Somebody already talking keeps their
place unless a newcomer is clearly louder, so nobody is cut off mid-word. - Better sound in rooms of up to twenty (#431). Everybody sends at
128 kbit/s, more than twice what voice used before. From twenty-one people
the room steps down to 96 kbit/s, and back up once it's down to sixteen.
Nobody sets it, and nobody hears the switch. - A lost packet doesn't stop a voice (#438). See the highlights. In a big
room it got worse fast: with 60 people and 8 talking, listeners heard 78%
of what was said. Now it's 99%. - A room filling all at once could leave somebody hearing nobody (#197).
In about one in ten joins of 60 people at once, one person's app refused
the server's call setup and heard silence. Fixed. - The voice bar in a big room (#197). With more than six people, it
keeps six places: you, then whoever just talked, lit while they talk.
Somebody new who talks takes the place of whoever spoke longest ago, so
nobody jumps around while talking. Everyone in the room is a small dot in
their own color underneath, ringed while they talk. Click the dots to see
everyone by name, type to find somebody, and press Enter to set their
volume. A room of six or fewer looks as it did. - You show up in voice once (#451). See the highlights. Behind the scenes,
your other connections were sometimes hung up on as well, and reconnected
so fast nobody noticed. - A microphone or speaker that stops working (#442) waits its half second
before Linger opens it again. A second report of the same stop could cut
that wait short, and the microphone could open once more just after you
left voice.
The list on a big server
- People shows the people you talk to (#197), on a server with more than
twelve people here or away: anybody you've ever had a DM with. Everyone
else folds under Everyone else, which starts folded. A smaller server's
list is unchanged. - A busy room's row shows up to 16 dots, up from 5, so a full raid looks
full. - One line per person, a new switch in Settings → Appearance, off to
start. Every row in the list is one line, and a status shows when you point
at somebody. The phone keeps two lines.
Emoji
- Every emoji there is (#359), up from 66. Search by name or by a word
for it ("hello" finds 👋), jump to a group with the tabs, and the emoji you
use come back at the top. The hand beside the search sets a skin tone once. - Shortcodes. Type a colon and two letters,
:smi, and pick from the
list, the way@offers people. A whole name,:smiley:, turns into 😃 as
you type it. The names are Discord's (:thumbsup:,:slight_smile:), and
GitHub's and Slack's work too. - A message of just a few emoji is drawn big, as Discord does.
- A server's own emoji. The host (or a co-host) adds pictures in
Settings → Emoji, and each becomes an emoji at once, named from its file:
party-parrot.gifis:party_parrot:. Animated GIFs stay animated. Up to
200 a server. - Emoji are drawn by your computer's own emoji font, so they look a little
different on Windows and Linux, and an older Windows 10 leaves out the
newest few dozen.
Reading
- Coming back to the phone app no longer lights up nearly every room
(#453). The app asked the server how far you'd read once per connection,
and if that one ask failed, every room looked new until a restart. A phone
coming back from the background often asked before Android had let its
network back in. It now asks again, and asks after every fresh connection
too. - Your own message no longer shows as new on your other devices (#454).
Sending a message now marks it read on the server, for every device you
use. A phone put away straight after sending used to lose that. - How far you've read only moves forward. One device can no longer pull
back what another one read.
Linux
- Opening Linger while it's already running no longer turns the GPU path
off (#447). Opening it again from the menu left a marker behind that the
next start took for a crash, so it switched WebKit's faster drawing off.
Typing then ran a beat behind, and on a computer with two graphics chips the
window could go grey. If typing has felt slow since, delete the
gbm-off-…file in~/.local/state/linger/and open Linger again. - A computer with two graphics chips shows the app, not a grey window
(#433). With WebKit's GPU path off (the AppImage always has it off), the
page could draw on one chip while the window was on the other. Linger now
sends the picture through ordinary memory in that case, which either chip
can show.
Under the hood
- The release's Android check shows what apksigner printed when it can't
find a signer (T-1604). That's how this release found why the check kept
failing: the build machine words the line differently. This release's
.apkwas built by hand from the same code and key, as 0.4.8's was, and
the check is fixed for the next one. - CI's final check fails when GitHub never ran a job, instead of passing
(#445). - The README has badges, a link to the website, and the website is step 5 of
a release.
Known issues
- Read positions don't move live between two devices that are both open.
Read a room on the phone while the computer is open, and the computer shows
it as new until it next connects afresh (a restart, say). Your own messages
are fine either way. - The phone app doesn't update itself. Install each new
.apkover the
old one. - On Hyprland (Omarchy included), the mouse pointer jumps into a
conversation that opens in a window of its own. The
user guide has the two lines that turn it
off. - The AppImage doesn't play AV1 videos (#358). Windows and the Arch,
.deband.rpmpackages do.
For hosts: updating the server
Server image: ghcr.io/itsmattguenther/linger:0.4.9 (x86-64 only), also
tagged latest.
What changes for you:
- Voice turns on by itself, if it was off. A server works out where voice
goes from its name (LINGER_DOMAIN) now. If you never set
LINGER_VOICE_ADDRESS, your server had no voice and now has it, as long as
UDP 3479 is open (Voice in the host guide). To
keep voice off, setLINGER_VOICE_ADDRESS=off(in.env, or in the
environment:part of an oldercompose.yaml) before updating. If you set
an address already, nothing changes. - A database change (server emoji).
update.shsaves the database into
backups/before it starts 0.4.9, and that backup is how you'd go back. - Server emoji are yours (and your co-hosts') to add in Settings → Emoji.
Friends on an older app see them as:name:until they update. - A raid needs everybody on 0.4.9. The server now throws away the silence
older apps send, but they still send it, and that costs your server. An
older app also can't say how loud it is, so when seven or more people talk
at once, its voice is the first left out. Upload for fifty people stays near
35 Mbps however many talk. The host guide has the
numbers. - The data folder fixes itself. The image makes
datawritable on its
own, so no morechownafter setting up or moving a server. - Setting up a new server is one script,
deploy/setup.sh, and every
setting lives in.env. An oldercompose.yamlwith its settings written
inside keeps working, and nothing makes you move. The host guide says how,
if you'd like to (Moving an older server's settings into
.env).
Run these on the server, one block at a time.
1. Go to the folder with your compose.yaml (the linger folder from
setup):
cd ~/linger2. Get this release's update.sh. It now says where voice goes; an
older copy warns that a server with no voice address carries no voice, which
isn't true from 0.4.9.
curl -fLO https://raw.githubusercontent.com/itsMattGuenther/Linger/main/deploy/update.sh
chmod +x update.sh3. Update:
./update.sh(Use sudo ./update.sh if you type sudo before docker commands.) It
says where voice goes, downloads 0.4.9 while the server keeps running, stops
it for a few seconds to save the database into backups/, starts everything
again, and prints the version before and after.
4. Check it worked:
curl -f https://linger.example.com/api/v1/healthWith your own address in place of linger.example.com, it should print
{"ok":true,"version":"0.4.9"}. Then docker compose logs linger | grep -i voice
says where voice goes, or that it's off.
If something goes wrong, update.sh prints the commands that put 0.4.8
back with the backup it just made. Going back needs that backup: 0.4.8
won't start on a database 0.4.9 has changed. Anything sent after the update
is lost when you go back, so decide soon if you're going to.
Install or update
Use the in-app update: Update… at the foot of the list, or Settings →
Account & App → Updates. Windows users should keep the same installer format
(.exe or .msi) when upgrading. Linux packages are .AppImage, .deb and
.rpm; on Omarchy or Arch, Linger updates with your system. Windows
installers are updater-signed, not Authenticode-signed; SmartScreen may still
warn about an unfamiliar app.
On Android, download Linger_0.4.9_android-arm64.apk from this release on
the phone and install it over the old one. You stay signed in. A first install
is step by step in the 0.4.8 notes.
New to Linger? Which file do I want?
| Your computer | Download the file ending in |
|---|---|
| Windows | -setup.exe |
| Debian, Ubuntu or Mint | .deb |
| Fedora, RHEL or openSUSE | .rpm |
| Any other Linux | .AppImage — make it executable and run it |
| macOS | Not built yet — see decisions.md |
| Android phone | _android-arm64.apk — download it on the phone |
| iPhone | Not yet |
The .msi is for companies rolling it out to many machines at once.
If you are not sure, you want the .exe.
The .sig files and latest.json are how an installed copy checks
that an update is genuine. You do not need to download them.
Windows will warn you. You get "Windows protected your PC", and
Run anyway is behind the small More info link. That is Windows
saying the installer has not been through a paid signing process. It
has not — that is a
known decision,
not a broken download.
Android will ask before installing. The phone says it won't
install apps from your browser until you allow it: tap Settings,
turn on Allow from this source, and go back. That is Android's
rule for any app that isn't from the Play Store. The phone app
doesn't update itself: install each new one from its release page,
right over the old one, and you stay signed in.
Checks on installed clients
Record OS, package type, previous and new version, and headset or microphone
with any failure. Use made-up messages, and keep private conversations out of
screenshots.
- Voice across two real networks (a home connection and a phone hotspot,
say), with three or more people: everybody hears everybody, and a
talker's voice doesn't drop out in short gaps (#438, #431). - A big room, with more than six people in voice: the voice bar keeps six
places, nobody moves while they talk, the dots light, and the everyone card
finds a person by name (#197). - Two devices in voice, then cut one's network: its seat goes within
about four minutes, the other device stays connected, and the chat's
voice line shows that person once (#451). - Phone: read everything on the computer, leave the phone app in the
background for a few minutes, come back: nothing shows as new. Send from
the phone and put it away at once: the computer doesn't show that room as
new (#453, #454). - Emoji: find one by a word in the picker, type
:thumbsup:in the box,
and send three emoji alone. As the host, add a server emoji in
Settings → Emoji and send it; somebody else sees the picture (#359). - Linux, a package: open Linger from the menu while it runs, quit, open
again.~/.local/state/linger/holds onlyrunning.lock(#447). - Linux, two graphics chips, the AppImage: the window shows the app
(#433). - As a host with no voice address set: after
update.sh, the logs say
where voice goes, and a call works (#440).