{"generated":"2026-10-16T11:58:10.584Z","app":[{"version":"1.14.0-beta.7","date":"2026-10-16","line":"Beta: server admin in one place, Settings in three groups, and new icons.","changes":[{"kind":"changed","area":"servers","text":"Server settings has everything for running a server: its pages sit under General, People, Channels, Moderation, Integrations and Hosting. Reports moved in from their own window, and a server this app runs gets a Hosting page with its start, stop and address controls. The server menu shows the waiting reports on Server settings."},{"kind":"changed","area":"settings","text":"Settings is grouped under You, App and Servers, and Profile opens on your name and picture again."},{"kind":"new","area":"chat","text":"Channels have a search button in their header, like direct messages. It starts in that channel, and removing the chip searches the whole server."},{"kind":"new","area":"notifications","text":"The server menu has the same Notifications choices as a server's right-click, and Settings › Notifications lists every channel and folder you've set differently."},{"kind":"changed","area":"servers","text":"Hide channels sits next to Hide members in a channel's ⋯ menu, \"What this server runs\" is called Plugins, and a new folder asks for its name before it's made."},{"kind":"changed","area":"chat","text":"New icons: a teardrop for chats and direct messages, its own icon for pinned messages, and a dozen others. Leaving a voice channel looks like leaving, and only a call shows a phone to hang up."},{"kind":"changed","area":"chat","text":"Every message fades in as it arrives, your own included, and yours no longer dims while it sends."},{"kind":"fixed","area":"chat","text":"A direct message to somebody whose key changed failed with \"Their keys couldn't be checked\". You're now told their key changed, and asked to check it on their card before sending."},{"kind":"fixed","area":"chat","text":"Pinned messages no longer says Loading… forever on a server that doesn't answer."},{"kind":"fixed","area":"settings","text":"Addons load from manifest.json, as the docs and examples say. They only loaded from addon.json before, which still works."},{"kind":"fixed","area":"settings","text":"Dialogs, tooltips and menus keep clear of the desktop title bar, and text on purple buttons is dark enough to read."},{"kind":"new","area":"settings","text":"You can take the welcome tour again from Settings › About, and it ends on our official server."}],"channel":"beta"},{"version":"1.14.0-beta.6","date":"2026-10-15","line":"Beta: your devices have names, and the Microsoft Store version says when there's an update.","changes":[{"kind":"changed","area":"settings","text":"A new device names itself, like \"Gryt beta on Windows PC\" or \"Chrome on macOS\", and on a server running 1.12.0-beta.3 or newer the others show their names too. One install on three servers is one \"New device linked\", not three."},{"kind":"new","area":"settings","text":"Each device says when it was last used, and \"Remove devices not used in 30 days\" clears out old ones on every server at once."},{"kind":"new","area":"settings","text":"The Microsoft Store version tells you when an update is out, with a button that opens Gryt in the Store. The Store can take a day or two to have it."}],"channel":"beta"},{"version":"1.14.0-beta.5","date":"2026-10-15","line":"Beta: search finds messages in every conversation you've read, not only the newest kind of direct message.","changes":[{"kind":"fixed","area":"chat","text":"Search in Messages found nothing in groups, or in a direct message that isn't on the newest encryption yet. It now finds what this device has opened there, kept encrypted on the device."},{"kind":"fixed","area":"chat","text":"A message deleted while Gryt was closed leaves search and the list's preview the next time you open its conversation."}],"channel":"beta","image":"https://gryt.chat/whats-new/dm-space.webp"},{"version":"1.14.0-beta.4","date":"2026-10-15","line":"Beta: What's new lays out its list properly again, and the hide buttons in Messages work.","changes":[{"kind":"fixed","area":"settings","text":"In beta.3 every change in What's new sat in a tall box of its own. They're plain rows again."},{"kind":"fixed","area":"chat","text":"The button beside Messages hides the list straight away, even with the pointer still on it. Hide channels in a server does too."},{"kind":"changed","area":"chat","text":"The panel beside a conversation slides shut and open instead of vanishing, and Hide conversation asks first."},{"kind":"changed","area":"chat","text":"A message you open from search, a pin or a reply keeps a steady outline for five seconds instead of flashing. Opening the next one moves it."},{"kind":"fixed","area":"voice","text":"In a call with someone, your chat with them stays open beside the call. The info panel steps aside while the call lasts."},{"kind":"changed","area":"voice","text":"Open another conversation during a call and the call moves to the green button in the rail. Open its conversation again to bring it back."},{"kind":"changed","area":"chat","text":"Leave group asks first, and Pinned only shows in a conversation that has pins."}],"channel":"beta","image":"https://gryt.chat/whats-new/dm-space.webp"},{"version":"1.14.0-beta.3","date":"2026-10-15","line":"Beta: What's new shows a picture of what a release changed.","changes":[{"kind":"new","area":"settings","text":"When a release has a picture, What's new shows it under the greeting. Click it to read the blog post, if the release has one."}],"channel":"beta","image":"https://gryt.chat/whats-new/dm-space.webp"},{"version":"1.14.0-beta.2","date":"2026-10-15","line":"Beta: direct messages get their own space, redrawn from top to bottom.","changes":[{"kind":"new","area":"chat","text":"Messages sits above your servers and holds every conversation from every server in one list, newest first. Pin the people you talk to most and drag them into order. Pins stay on this device."},{"kind":"new","area":"chat","text":"The panel beside a conversation shows the person's own card, with what's pinned and shared underneath. Groups show their members there, and New message and New group share one dialog."},{"kind":"changed","area":"chat","text":"A message that went out unencrypted gets a small red dot. Click Not encrypted in the header to see why and what you can do, ask them to update, or stop marking messages in that conversation."},{"kind":"security","area":"chat","text":"When someone's key changes, their card shows the new code. Compare it with them somewhere other than Gryt, and if it matches, trust it and the conversation is encrypted again."},{"kind":"new","area":"chat","text":"When someone adds a person to a group, everyone in it sees who added whom, and what the new person can read from before. It needs the server on 1.12.0-beta.2 or newer."},{"kind":"changed","area":"servers","text":"A server that can't be reached keeps its header and says Can't reach it, with Try now and Check the connection. It opens anyway, and short drops no longer pop up a message each time."}],"channel":"beta","image":"https://gryt.chat/whats-new/dm-space.webp"},{"version":"1.14.0-beta.1","date":"2026-10-14","line":"Beta: search messages and file names with Ctrl+K.","changes":[{"kind":"new","area":"chat","text":"Ctrl+K, or the magnifier in the channel header, opens search beside the chat. Pick a result and the chat opens at that message, and the results stay open so you can go through several."},{"kind":"new","area":"chat","text":"Type from:, in:, has:, before: or after: to narrow it down, and switch between Messages and Files. It needs the server to be on 1.12 or newer."}],"channel":"beta"},{"version":"1.13.36","date":"2026-10-14","line":"Pointing at a reaction shows who reacted straight away.","changes":[{"kind":"fixed","area":"chat","text":"Pointing at the emoji in a reaction showed only the emoji's name, and who reacted turned up only once you moved off it a little. It shows who reacted right away now, under the emoji itself instead of its :code: name."}]},{"version":"1.13.35","date":"2026-10-14","line":"Compact in the mini window gives the text the whole width, and join lines line up with the messages.","changes":[{"kind":"changed","area":"chat","text":"In the mini window, Compact puts the time and name at the start of the first line and lets the text wrap back under them, so a long message no longer runs down a narrow column on the right. A bigger window keeps the column of times."},{"kind":"changed","area":"chat","text":"In Compact, a line like \"joined the server\" lines up with the messages around it, with its time in the same column, and it no longer wraps onto two lines in a narrow window."}]},{"version":"1.13.34","date":"2026-10-13","line":"In Compact, the time in front of each message is always shown.","changes":[{"kind":"changed","area":"chat","text":"Compact kept a column in front of each name for a time you only saw when you pointed at the message. The time now always shows there, and the column is only as wide as your clock needs."}]},{"version":"1.13.33","date":"2026-10-13","line":"The reaction bar and the right-click menu offer the same emojis.","changes":[{"kind":"fixed","area":"chat","text":"The bar you get when pointing at a message and the menu you get from right-clicking it both show the four reactions you use most, in the same order. The menu used to show the four you used last."},{"kind":"changed","area":"chat","text":"The menu from the bar's ... button skips the row of emojis, since the bar already showed them."}]},{"version":"1.13.32","date":"2026-10-13","line":"A message's corners follow the picture or card inside it, with the same edge all the way round.","changes":[{"kind":"changed","area":"chat","text":"The background behind a message has the same padding on every side, and its corners are rounded to match whatever sits in them, so a picture or card gets an even edge."},{"kind":"fixed","area":"chat","text":"A webhook card no longer has extra space on its right, and a message that starts with a picture has no gap above it."}]},{"version":"1.13.31","date":"2026-10-13","line":"The reaction bar sits right above the message you point at, in every style.","changes":[{"kind":"fixed","area":"chat","text":"In Lines and Compact the bar for reacting and replying sat at the far edge of the chat, a long way from a short message. It now sits just above the message's end, like it does in Bubbles."},{"kind":"fixed","area":"chat","text":"A message with one big picture lights up only as wide as the picture, and messages get the same padding on every side."}]},{"version":"1.13.30","date":"2026-10-13","line":"Click a picture and the lightbox opens on it with the rest of that message beside it, with zoom and a darker backdrop.","changes":[{"kind":"changed","area":"chat","text":"The lightbox shows every picture and video in the message. The arrows, the left and right keys, or the strip of thumbnails along the bottom move between them, and the top bar says who sent it and when."},{"kind":"new","area":"chat","text":"Zoom a picture up to 800% with the buttons, the + and - keys, the scroll wheel or a double click, and drag to look around. 0 fits it back."},{"kind":"changed","area":"chat","text":"The backdrop behind the lightbox is darker and blurred, so the chat gets out of the way."}]},{"version":"1.13.29","date":"2026-10-13","line":"Webhook cards read properly in Compact, and the reaction bar opens only from the message itself.","changes":[{"kind":"fixed","area":"chat","text":"In Compact, a webhook card like Gryt Git's squeezed down to a few letters wide. It gets its full width again."},{"kind":"changed","area":"chat","text":"The bar for reacting and replying opens when you point at the message itself, not at the empty space beside it."},{"kind":"fixed","area":"chat","text":"Opening a channel with lots of reactions no longer leaves you just above the bottom."},{"kind":"changed","area":"chat","text":"A message this version can't show, like something a newer Gryt or a plugin sent, says so instead of showing nothing."}]},{"version":"1.13.28","date":"2026-10-13","line":"Pictures sit in squares that fill the width, and the reaction bar stays in one place.","changes":[{"kind":"changed","area":"chat","text":"Two or more pictures show as equal squares, as many across as there's room for, each cropped to fill. Three pictures no longer come out at three different sizes."},{"kind":"changed","area":"chat","text":"In Cozy and Compact, the bar for reacting and replying always sits just above the message at the edge of the chat, instead of moving beside short messages."}]},{"version":"1.13.27","date":"2026-10-13","line":"Polls, made from the + next to the message box.","changes":[{"kind":"new","area":"chat","text":"Make a poll from + then Poll: up to ten options you can drag into order, one answer or several, anonymous or not, which roles can answer, and when it ends. Click an option to vote or change your vote, and point at one to see who picked it. Needs a server on 1.11.0."},{"kind":"changed","area":"settings","text":"With Rich Presence on, a game Gryt has no name for gets one the next day. Gryt sends us only its app number, and the game list picks the name up from there."}]},{"version":"1.13.27-beta.1","date":"2026-10-13","line":"Beta: polls, made from the + next to the message box.","changes":[{"kind":"new","area":"chat","text":"Make a poll from + then Poll: up to ten options you can drag into order, one answer or several, anonymous or not, which roles can answer, and when it ends. Click an option to vote or change your vote, and point at one to see who picked it. Needs a server on 1.11.0, which is on the beta channel."}],"channel":"beta"},{"version":"1.13.26","date":"2026-10-13","line":"Pictures go out as a grid, and you can drag files into order before sending.","changes":[{"kind":"new","area":"chat","text":"Two or more pictures in a message show as a grid, with a +N tile when there are more than four. Files sit two to a row underneath."},{"kind":"new","area":"chat","text":"Drag the files waiting in the message box left and right to change the order they're sent in."},{"kind":"changed","area":"chat","text":"The message box has a round + button with one Attach files item, and the emoji button sits on the right."},{"kind":"fixed","area":"chat","text":"In Cozy the hover bar sits at the top right of a message instead of covering the text or a link preview. Compact puts it in the corner too, and only shows the time while you point at the message."},{"kind":"fixed","area":"chat","text":"A reply's quote shows emoji, custom emoji and smileys like :D the way the message does."},{"kind":"fixed","area":"chat","text":"When a picture or file can't be uploaded, the unsent message goes away instead of hanging around, and the error says what to tell whoever runs the server."}]},{"version":"1.13.25","date":"2026-10-13","line":"Pointing at someone in the member list shows their card behind their name.","changes":[{"kind":"changed","area":"servers","text":"Hovering someone in the member list fills their row with their card, its banner, colours and pattern, in place of the grey highlight. The list itself stays plain."}]},{"version":"1.13.24","date":"2026-10-13","line":"A bigger emoji picker with proper category icons, and a hover bar that's easier to hit.","changes":[{"kind":"changed","area":"chat","text":"The emoji picker is bigger, with larger emoji, a row of category icons down the side, and the name of whatever you're pointing at along the bottom. Press Enter in the search to pick the first match."},{"kind":"fixed","area":"chat","text":"The emoji picker's categories showed as dots. They show icons now."},{"kind":"changed","area":"chat","text":"The bar that shows up when you hover a message has bigger buttons, and the highlight behind a message is only as wide as its text."},{"kind":"fixed","area":"chat","text":"Messages sat right against the scrollbar, and on a short bubble the hover bar ran off the left of the chat. Both have room now."}]},{"version":"1.13.23","date":"2026-10-13","line":"Messages come in three styles now, and yours can sit on the right.","changes":[{"kind":"new","area":"chat","text":"You can pick how messages look under Appearance → Messages in settings. Cozy is how they've always looked, Compact puts each one on a single line, and Bubbles gives each its own bubble."},{"kind":"new","area":"chat","text":"Your own messages can sit on the right, like they do in most phone chat apps."},{"kind":"changed","area":"chat","text":"The bar that shows up when you hover a message sits at its top corner and stays off the text. It has four quick reactions, more reactions, reply and a ⋯ button. Threads, pin, edit, copy, report and delete moved into the ⋯ menu, the same one a right-click opens."}]},{"version":"1.13.22","date":"2026-10-08","line":"The quote above a reply shows names instead of the code behind a mention.","changes":[{"kind":"fixed","area":"chat","text":"A reply to a message that mentioned someone quoted it as [@Name](mention:…). It reads @Name now, and a channel link reads #channel."}]},{"version":"1.13.21","date":"2026-10-08","line":"Channels show what they're for next to their name, and editing a channel no longer deletes its description.","changes":[{"kind":"new","area":"chat","text":"A channel's description shows beside its name at the top of the chat. Server admins can write or change it in the channel's settings."},{"kind":"fixed","area":"servers","text":"Saving a channel's settings, even just renaming it, deleted the description it was created with."},{"kind":"changed","area":"self-hosting","text":"The server that comes with the desktop app is now 1.10.58, so a server hosted from the app can wake phones too."}]},{"version":"1.13.20","date":"2026-10-07","line":"An open desktop no longer keeps your phone quiet once you've stepped away, and new devices pick from 668 names instead of 152.","changes":[{"kind":"fixed","area":"notifications","text":"Leaving the desktop app open kept your phone from getting notifications, all day. Now the phone gets them once the Gryt window has been in the background for a minute, or you haven't touched it for five."},{"kind":"changed","area":"settings","text":"A new device picks its starting name from 668 instead of 152, so two people on one server rarely end up with the same one."}]},{"version":"1.13.19","date":"2026-10-07","line":"Jump to present from wherever you've scrolled, with a count of what's new and a line showing where it starts.","changes":[{"kind":"new","area":"chat","text":"Scroll more than two screens up and a Jump to present button floats over the chat. If messages come in while you're up there, it shows how many."},{"kind":"new","area":"chat","text":"Messages that arrive while you're scrolled up get a New line above them. It goes a few seconds after you're back at the bottom."},{"kind":"changed","area":"chat","text":"Scrolling far back keeps 300 messages loaded at most, so getting back to the present loads one page instead of everything in between."}]},{"version":"1.13.18","date":"2026-10-07","line":"Pin messages and jump to any old one, screen shares wait for a click, a loud mic can't clip, and the chat glides down to new messages.","changes":[{"kind":"new","area":"chat","text":"Pin a message from its right-click menu, and open a conversation's pins from the button in its header. In a channel you need Manage messages; in a DM either of you can."},{"kind":"new","area":"chat","text":"Clicking a pin or a reply's quote takes you to that message, however far back it is. Scroll down to read on, or press Jump to present."},{"kind":"changed","area":"voice","text":"When someone shares their screen, you see a tile with a Watch stream button instead of the stream. Hover a stream to stop watching it."},{"kind":"fixed","area":"voice","text":"A hot mic, like one coming through a mixer, could clip on loud words. Your mic now always stays below full scale, and auto gain is off unless you turned it on yourself."},{"kind":"fixed","area":"chat","text":"A long message or a picture arriving could leave the chat short of the bottom. The chat now glides down to new messages, and your own message no longer flickers as it sends."},{"kind":"new","area":"settings","text":"The owl designer has a Copy link button, and the link previews as your owl when you paste it into a chat."},{"kind":"changed","area":"settings","text":"Bug reports with logs included now carry a call's connection numbers, so lag that has already passed still shows up."}]},{"version":"1.13.18-beta.4","date":"2026-10-07","line":"Beta: the chat glides down to new messages, and your own message no longer flickers as it sends.","changes":[{"kind":"changed","area":"chat","text":"When a new message arrives while you're at the bottom, the chat slides down to it instead of jumping a whole line at once."},{"kind":"fixed","area":"chat","text":"Your own message faded in twice and the chat wobbled slightly as it went from sending to sent."}],"channel":"beta"},{"version":"1.13.18-beta.3","date":"2026-10-06","line":"Beta: jump straight to any old pin or reply, and new messages keep you at the bottom.","changes":[{"kind":"new","area":"chat","text":"Clicking an old pin or reply opens the history right at that message, however far back it is. Scroll down to read on, or press Jump to present. It needs server 1.10.57-beta.1. Older servers still search back up to 1,000 messages."},{"kind":"fixed","area":"chat","text":"A long message or a picture arriving could leave the chat short of the bottom. It now keeps you there whenever you were at, or just above, the bottom."},{"kind":"changed","area":"chat","text":"New messages slide in quicker and more smoothly."}],"channel":"beta"},{"version":"1.13.18-beta.2","date":"2026-10-06","line":"Beta: clicking an old pin or reply now takes you to it, even when it's far up the history.","changes":[{"kind":"fixed","area":"chat","text":"Clicking a pin, or the quote on a reply, did nothing when the message was older than what had loaded. The app now loads older messages until it finds it, up to 1,000 back."},{"kind":"fixed","area":"chat","text":"Loading older messages while you were at the bottom of a channel could pull the view back down."}],"channel":"beta"},{"version":"1.13.18-beta.1","date":"2026-10-06","line":"Beta: screen shares wait until you click Watch, a loud mic no longer clips, and you can pin messages.","changes":[{"kind":"changed","area":"voice","text":"When someone shares their screen, you see a tile with a Watch stream button instead of the stream. Hover a stream you're watching to stop watching it."},{"kind":"fixed","area":"voice","text":"A hot mic, like one coming through a mixer, could clip on loud words. Your mic now always stays below full scale, and auto gain is off unless you turned it on yourself."},{"kind":"new","area":"chat","text":"Pin and unpin a message from its right-click menu, and open the pinned list from the header. It needs server 1.10.56-beta.2."},{"kind":"new","area":"settings","text":"The owl designer has a Copy link button, and the link previews as your owl when you paste it into a chat."},{"kind":"changed","area":"settings","text":"Bug reports with logs included now carry a call's connection numbers, one line a second, so lag that has passed still shows up."}],"channel":"beta"},{"version":"1.13.17","date":"2026-10-06","line":"Member cards show a shared name's number, and a card's emoji pattern no longer leaves the banner empty.","changes":[{"kind":"changed","area":"chat","text":"When someone shares a name with another member, their card shows the number beside it too, like Gold #2."},{"kind":"fixed","area":"chat","text":"A card whose emoji pattern used an emoji this server doesn't have showed an empty banner. It shows ✨ instead now."}]},{"version":"1.13.16","date":"2026-10-06","line":"Deleting one custom emoji asks first, like deleting them all already did.","changes":[{"kind":"fixed","area":"servers","text":"In Server settings, the trash button on a single emoji deleted it right away, with no undo. It asks first now."}]},{"version":"1.13.15","date":"2026-10-06","line":"Members who share a name are numbered by who joined first, and a game's card no longer drops when the presence helper starts late.","changes":[{"kind":"new","area":"chat","text":"When two members on a server share a name, each gets a number after it by who joined first, so the original is Gold #1 and the next is Gold #2. It shows in the member list, the @ picker, mentions and message headers, and @ pings the one you picked."},{"kind":"fixed","area":"settings","text":"With the presence helper on, a game that started alongside Gryt could lose its connection, and its card never came back. Gryt waits for the helper now."}]},{"version":"1.13.14","date":"2026-10-05","line":"Pictures linked from other sites wait until you load them, one message key warning instead of a stack, and Gryt can open at login on a Mac.","changes":[{"kind":"security","area":"chat","text":"Pictures, videos and audio linked from other sites, and the pictures on link previews, wait for you to press Load, like players already did. Always load from a site trusts it on this device, and Settings → Chat lists the sites you trust."},{"kind":"fixed","area":"settings","text":"Signing in on another device showed a message key warning for every server you're on. It's one warning now, naming the servers, with Don't warn me again if your direct messages don't need to be private from the server."},{"kind":"new","area":"settings","text":"On a Mac, Desktop settings have Open at login."},{"kind":"changed","area":"settings","text":"A card's status line no longer sits in a coloured band. Only a game gets one."}]},{"version":"1.13.13","date":"2026-10-05","line":"Pictures in messages only load from the server you're on, and you can tell Gryt when it spotted the wrong game.","changes":[{"kind":"security","area":"chat","text":"A picture in a message only loads if it comes from the server you're on. One linked from anywhere else shows as a link, so that site can't see who read the message."},{"kind":"new","area":"servers","text":"Server owners can let members use custom emoji from their other servers. It's off unless the owner turns it on, and needs a server that has the setting."},{"kind":"new","area":"settings","text":"When Gryt asks whether to show a game it spotted, Wrong game? hides it and opens the feedback form so you can say what you're actually playing."},{"kind":"fixed","area":"settings","text":"Signing back in no longer asks to move a guest to your account on servers where it's already been moved."}]},{"version":"1.13.12","date":"2026-10-05","line":"Frame a banner before it goes up, get old cards back with their banners, and make a banner short.","changes":[{"kind":"new","area":"settings","text":"Picking a picture for your card's banner opens a crop box. Drag and zoom it, and what's in the box is what your card shows."},{"kind":"new","area":"settings","text":"The cards under Used before keep the banner they had, on this device, and picking one brings both back."},{"kind":"new","area":"settings","text":"The card editor has a Banner height choice. A short banner stays short even with a picture or a pattern. Your server needs 1.10.55 to keep it."},{"kind":"fixed","area":"settings","text":"Copying a video avatar to your other servers sends the video to the ones that take it, instead of a still."},{"kind":"fixed","area":"chat","text":"Pictures and videos in a thread panel swap in once the server has checked them, like they do in the channel."}]},{"version":"1.13.11","date":"2026-10-05","line":"Pictures and videos in chat show a loader while the server checks them, and hovering a server shows who's in voice.","changes":[{"kind":"new","area":"chat","text":"A picture or video the server is still checking shows a loader in its place, and swaps in when it's ready. If it can't be used, the message says so instead."},{"kind":"new","area":"servers","text":"Hovering a server in the sidebar lists who's in its voice channels. Calls in direct messages aren't shown."},{"kind":"security","area":"self-hosting","text":"On a server hosted from the app, chat videos are converted inside its sandbox too, keeping their sound."}]},{"version":"1.13.10","date":"2026-10-05","line":"Server owners can see how uploads are handled and switch video avatars off, and you're told when an avatar couldn't be used.","changes":[{"kind":"new","area":"servers","text":"Server settings have an Uploads section. It says whether new pictures and videos are checked in a sandbox on this server, and has a switch for video avatars and banners, greyed out with the reason where the server can't convert video."},{"kind":"changed","area":"settings","text":"The avatar and banner pickers only offer video where one of your servers takes it, and a video only goes to those servers. The others keep what you had."},{"kind":"fixed","area":"settings","text":"If an avatar or banner can't be processed, you're told, and your old one stays. Before, it just never showed up."}]},{"version":"1.13.9","date":"2026-10-05","line":"A server you host from the app checks uploads in a sandbox before anyone sees them, and the Microsoft Store version no longer offers a beta switch it can't use.","changes":[{"kind":"security","area":"self-hosting","text":"On a server hosted from the app, new avatars, banners and chat pictures are decoded and written out fresh inside a locked-down window with no network or file access, and only that copy is served. Banner and avatar videos become short silent clips there too. Chat-video previews are made the same way, rather than with a video tool installed on your computer."},{"kind":"fixed","area":"settings","text":"In the Microsoft Store version, turning on beta releases restarted Gryt and did nothing. The Store keeps it up to date, so the switch is gone, and Settings says how to get betas instead."}]},{"version":"1.13.8","date":"2026-10-05","line":"You can pick a short video as your avatar, on servers that convert video.","changes":[{"kind":"new","area":"settings","text":"The avatar picker in your profile takes MP4, WebM and MOV. The server turns the video into a silent clip of up to ten seconds, and it plays on your card. A server that can't convert video says so, and you can pick a picture instead."},{"kind":"changed","area":"settings","text":"Each start now writes which copy of Gryt started to the log file, so it's easier to tell a Store copy and a downloaded copy apart."}]},{"version":"1.13.7","date":"2026-10-05","line":"A new emoji picker in chat that lists the server's own emoji first, and cards can play a video banner or avatar.","changes":[{"kind":"changed","area":"chat","text":"Chat uses the same emoji picker as the card editor now. It's quicker to scroll, jumps between categories, and lists this server's own emoji first, then the ones you've used lately."},{"kind":"fixed","area":"chat","text":"With more than one server open, the picker could offer another server's custom emoji. Each server keeps its own list now."},{"kind":"new","area":"chat","text":"If a member has a video banner or avatar, it plays on their card, muted and on a loop. The member list and voice tiles show a still frame from it."}]},{"version":"1.13.6","date":"2026-10-05","line":"The card editor is smooth again, and small text on a light card can be read.","changes":[{"kind":"fixed","area":"settings","text":"The card editor kept redrawing its pattern previews over and over, which made it slow to use. It only redraws when something changes now."},{"kind":"fixed","area":"chat","text":"On a card coloured all over, \"Playing\" and other small text are drawn in the card's own ink again. On a light card they had nearly disappeared."}]},{"version":"1.13.5","date":"2026-10-02","line":"Member cards can use any Phosphor icon, Unicode emoji, or emoji from the current server as a pattern.","changes":[{"kind":"new","area":"settings","text":"The card editor can search every Phosphor icon and choose Unicode or current-server emoji for scattered patterns."}]},{"version":"1.13.4","date":"2026-10-01","line":"Thick card outlines follow the card colour cleanly, and banner-only colours can use every fade.","changes":[{"kind":"fixed","area":"settings","text":"Thick outlines use the card colour, stay rounded, and keep a faint inner highlight."},{"kind":"fixed","area":"settings","text":"The banner fade control stays available when colour fills only the banner, and copied links remember the choice."}]},{"version":"1.13.3","date":"2026-09-30","line":"Thick card outlines keep banners rounded, and running games stay on your profile when Gryt restarts.","changes":[{"kind":"fixed","area":"settings","text":"Card banners follow the rounded corners inside thick outlines."},{"kind":"fixed","area":"settings","text":"A game that is already running stays on your profile after Gryt restarts."}]},{"version":"1.13.2","date":"2026-09-30","line":"Banner changes preview on your card and wait for Save, and server roles can control who may upload one.","changes":[{"kind":"changed","area":"settings","text":"Choosing or removing a banner updates the card preview first. The file is sent to your servers only when you save the card."},{"kind":"new","area":"servers","text":"The role editor has a separate permission for uploading member-card banners."}]},{"version":"1.13.1","date":"2026-09-30","line":"Member cards get a cleaner game activity section and steadier controls, and the card builder starts with a new design on every visit.","changes":[{"kind":"changed","area":"settings","text":"Game activity no longer has its own background on member cards."},{"kind":"changed","area":"settings","text":"The card builder opens with a random design, and its colour choices now use sliding tabs without moving the Surprise me button."}]},{"version":"1.13.0-beta.14","date":"2026-09-30","line":"Beta: the card's banner can have no fade, and a thick outline no longer leaves a gap at the corners.","changes":[{"kind":"new","area":"settings","text":"\"No fade\" is a third choice for the banner on your card, for a hard edge. It needs server 1.10.47."},{"kind":"fixed","area":"settings","text":"A thick outline on your card no longer leaves a gap at the banner's top corners."}],"channel":"beta"},{"version":"1.13.0-beta.13","date":"2026-09-30","line":"Beta: click somebody to open their card, everyone has a card from the start, and cards and owls can be shared by link.","changes":[{"kind":"changed","area":"chat","text":"Clicking a member, or an avatar in chat, opens their card. Message is a button on the card, and clicking their picture opens it large."},{"kind":"new","area":"settings","text":"Everyone has a card from the start: until you make your own, it's worked out from your name, like your owl."},{"kind":"new","area":"settings","text":"The card editor can paste a card link, keeps the cards you used before on this device, and has Surprise me on every tab. The Styles tab is gone."},{"kind":"new","area":"settings","text":"\"Use in Gryt\" on the card builder opens the card in the app, where you see it before you save it."},{"kind":"fixed","area":"settings","text":"A portrait photo as your avatar stays round on your card. It used to stretch into an oval."},{"kind":"new","area":"settings","text":"Support Gryt in settings links to GitHub Sponsors."}],"channel":"beta"},{"version":"1.13.0-beta.12","date":"2026-09-30","line":"Beta: the card editor offers colours from your banner, and a pattern can sit over the banner, with its own line weight and an outline for the card.","changes":[{"kind":"new","area":"settings","text":"With a banner, the card editor offers the banner's colours for the card, the bottom edge first, so the picture runs into the card."},{"kind":"new","area":"settings","text":"A pattern can sit in front of your banner picture or behind it, and still cover the whole card."},{"kind":"new","area":"settings","text":"Line patterns have a line weight, and the card has an outline you can make thicker or remove. These need server 1.10.45."}],"channel":"beta"},{"version":"1.13.0-beta.11","date":"2026-09-30","line":"Beta: Surprise me rolls every part of a card, game art is gone from cards, and \"Online\" stays readable on a coloured card.","changes":[{"kind":"changed","area":"settings","text":"Surprise me in the card editor rolls every field, including where the colour fills, the fades, and the pattern's colour and strength."},{"kind":"changed","area":"servers","text":"Cards no longer draw game art behind the band, and the server setting for clearing cached art is gone with it."},{"kind":"fixed","area":"settings","text":"The status word on a card coloured in the banner and band takes the card's text colour, so \"Online\" can be read on a green or teal card."}],"channel":"beta"},{"version":"1.13.0-beta.10","date":"2026-09-30","line":"Beta: newly added games and apps get their name the same day, so Modrinth no longer shows as \"A game\".","changes":[{"kind":"fixed","area":"settings","text":"A newly added game or app could show its icon with \"A game\" under it for up to a day. Gryt now reads the game list from GitHub first, so the name arrives with the icon."},{"kind":"changed","area":"settings","text":"The game list that ships with the app is refreshed, so a fresh install knows Modrinth and the other recently added apps straight away."}],"channel":"beta"},{"version":"1.13.0-beta.9","date":"2026-09-30","line":"Beta: the card editor has tabs and a Save button, everyone starts with a random card, and server owners can clear cached game art.","changes":[{"kind":"changed","area":"settings","text":"The card editor is in tabs with your card beside it, so there's little to scroll. Changes wait for Save, and Undo changes puts back what you had."},{"kind":"changed","area":"settings","text":"Copy link in the card editor copies a link to the card builder on ui.gryt.chat. The style-code box is gone."},{"kind":"new","area":"settings","text":"If you haven't styled your card, you get a random style once. A card you've already picked is left alone."},{"kind":"fixed","area":"settings","text":"A pattern set to cover the whole card now shows on a solid colour."},{"kind":"new","area":"servers","text":"Server settings show how much game art the server keeps, with a button to clear it."}],"channel":"beta"},{"version":"1.13.0-beta.8","date":"2026-09-30","line":"Beta: the game list comes in Gryt's own format, and spotted games can be removed.","changes":[{"kind":"changed","area":"settings","text":"The game list comes in one file in Gryt's own format, with names and program names together, so it downloads once."},{"kind":"new","area":"settings","text":"Remove a game from the list of games Gryt has spotted. Gryt asks again the next time it sees it."}],"channel":"beta"},{"version":"1.13.0-beta.7","date":"2026-09-29","line":"Beta: Gryt can spot games and apps you're running, asking once for each, and member cards come from Gryt UI with a card builder you can share from.","changes":[{"kind":"new","area":"settings","text":"Spot games and apps: Gryt recognises about 10,000 games and some apps by their program and asks once before showing each, with a toast that waits for your answer. Apps read \"Using Figma\". A game that reports through Rich Presence still wins."},{"kind":"new","area":"settings","text":"Name a game that no list knows, like a private Minecraft server, and suggest it for everyone."},{"kind":"new","area":"servers","text":"Member cards show the game's art faintly behind the game band, served by your server so nobody's address goes to Steam or Discord."},{"kind":"new","area":"settings","text":"Edit my card opens in its own window with your card beside the controls, has Surprise me, and takes card links from the new builder at ui.gryt.chat/card."},{"kind":"changed","area":"servers","text":"A card with no picture and no pattern has a shorter banner, so there's no empty block above the name."},{"kind":"new","area":"settings","text":"Addons can ask to see what's playing and to put a card on your profile, and every addon now shows how risky its permissions are. The first one is Now Playing."}],"channel":"beta"},{"version":"1.13.0-beta.6","date":"2026-09-29","line":"Beta: Settings shows what games send to Gryt, so you can tell whether Rich Presence is working.","changes":[{"kind":"new","area":"settings","text":"\"What Gryt receives\" under Rich Presence lists what games have sent, live, and says when a game like CS2 doesn't use Rich Presence at all."},{"kind":"changed","area":"settings","text":"The long explanations under Rich Presence, the Gryt helper and Programs you add are folded away under \"How this works\"."}],"channel":"beta"},{"version":"1.13.0-beta.5","date":"2026-09-29","line":"Beta: Rich Presence and the programs you add now sit together under one heading in Settings.","changes":[{"kind":"changed","area":"settings","text":"Settings → Profile has one \"What you're playing\" heading, with Rich Presence first and \"Programs you add\" under it."}],"channel":"beta"},{"version":"1.13.0-beta.4","date":"2026-09-29","line":"Beta: member cards are redone in your own colours, with hundreds of patterns to make one yours, and Rich Presence recognizes far more games.","changes":[{"kind":"new","area":"servers","text":"Member cards are redesigned in the member's own colours, with a banner, a game band, and actions like message, add friend, mention, report and block."},{"kind":"new","area":"settings","text":"Edit my card in Settings: colour, pattern, banner, pronouns, bio and a status line, with a live preview. It saves itself and reaches every server you're on."},{"kind":"new","area":"servers","text":"Hundreds of patterns for a card, from tile designs to scattered owls and icons, each tunable for size, rotation, strength, fade and colour."},{"kind":"new","area":"servers","text":"A member's Rich Presence card shows the game's icon, when the game reports one."},{"kind":"changed","area":"settings","text":"Rich Presence now names games from Discord's full detectable-apps list, not just the smaller list Gryt curated itself."}],"channel":"beta"},{"version":"1.13.0-beta.3","date":"2026-09-29","line":"Beta: an optional helper can hold Discord's Rich Presence connection so Gryt and Discord both get to show what you're playing.","changes":[{"kind":"new","area":"settings","text":"Turn on the Gryt helper in Settings and it holds the Rich Presence connection games talk to, starting at login. It's off by default. If Discord already has that connection, the warning now offers a \"Turn on the Gryt helper\" button instead of asking you to quit Discord."},{"kind":"changed","area":"settings","text":"Gryt falls back to its own Rich Presence listener whenever the helper isn't running, so turning it off doesn't lose game activity. Uninstalling Gryt removes the helper too."},{"kind":"changed","area":"self-hosting","text":"The helper ships built, signed and notarized into the Mac, Windows and Linux packages. It isn't in the Mac App Store, Microsoft Store or portable Windows build."}],"channel":"beta"},{"version":"1.13.0-beta.2","date":"2026-09-29","line":"Beta: games that talk to Discord can show what you're playing in Gryt instead, and links to pictures and files no longer carry a long-lived key.","changes":[{"kind":"new","area":"settings","text":"Game activity: turn it on in Settings and games that report to Discord report to Gryt instead, with details like the mode, a timer and party size. Gryt only listens on that connection, it doesn't read your running programs. If Discord already holds it, Settings says so and Gryt takes over a few seconds after Discord quits."},{"kind":"new","area":"servers","text":"A member's card shows the game they're playing, with what they're doing and for how long."},{"kind":"security","area":"servers","text":"Links to pictures and files are signed for one file and last a few minutes, instead of carrying a token that could open everything you can see for 12 hours."},{"kind":"fixed","area":"self-hosting","text":"The Linux AppImage builds again."}],"channel":"beta"},{"version":"1.13.0-beta.1","date":"2026-09-29","line":"Beta: link a new device from one you already use, by QR code or a short code, and it gets your keys, your servers and your encrypted DM history.","changes":[{"kind":"new","area":"settings","text":"Link a device: the new device shows a QR code and a short code. Scan it with your phone or type the code on a signed-in computer, check the emoji match, and approve. The new device signs in with the same keys, joins your servers and gets your encrypted DM history."},{"kind":"new","area":"settings","text":"Your other devices tell you when a new one is linked, with Remove right there. Linking warns you first if a server already has five of your devices."},{"kind":"new","area":"settings","text":"Settings > Security lists your devices for encrypted DMs on each server. A device you remove stays removed."},{"kind":"fixed","area":"chat","text":"An encrypted DM sent while the server restarts waits and goes out once, instead of failing or arriving twice."}],"channel":"beta"},{"version":"1.12.1","date":"2026-09-28","line":"Reactions work in encrypted DMs, a screen share freezes far less on a slow upload, and the friend button says what it does.","changes":[{"kind":"new","area":"chat","text":"You can react to messages in end-to-end encrypted DMs. Reactions are encrypted like the messages they're on."},{"kind":"changed","area":"voice","text":"With your camera and a screen share both on, the app now splits your upload between them. On a slow connection the share froze about three times less often in our tests. Your camera may drop to a lower quality for a while to make room."},{"kind":"changed","area":"servers","text":"The friend button says Add friend, Requested or Accept instead of showing only an icon. Cancelling a request asks first, and you can decline a request as well as accept it."},{"kind":"new","area":"settings","text":"What's New links to the blog post when a release has one."},{"kind":"changed","area":"servers","text":"In the reports panel, a report on an encrypted DM says Close report rather than Delete, because the server has no copy of that message to delete."},{"kind":"fixed","area":"servers","text":"The card that pops up when you hover a server icon no longer blocks clicks on the channel list under it."},{"kind":"fixed","area":"settings","text":"The default light appearance has enough contrast on its accent colour."}]},{"version":"1.12.0","date":"2026-09-28","line":"Direct messages on the desktop and the web now use MLS, so a key that leaks later can't open messages from before it leaked. On a reconnect, the app also waits for the server to prove who it is before sending your sign-in token.","changes":[{"kind":"security","area":"servers","text":"When the app reconnected to a server, it sent your sign-in token, and anything you'd sent while offline, before the server had proved who it is. Uploads, avatars, emoji and other requests with the token didn't wait at all. Only the first connection waited. Now every connection and every request with your token waits for the proof."},{"kind":"new","area":"chat","text":"One-to-one DMs are end-to-end encrypted with MLS once the other person has an app that can do it. Every message gets its own key, and your device deletes it after use, so a key stolen later can't open what came before. It needs a server on 1.10.35 or later. DMs from before keep opening the way they did."},{"kind":"changed","area":"chat","text":"Your MLS messages are kept on the device that read them. On the web that's this browser, and clearing its site data deletes them. A new device starts with nothing from before it joined, and your 24 words don't bring that history back."},{"kind":"new","area":"settings","text":"If your keychain won't let Gryt open the messages it keeps on this device, the DM and Settings > Security say so, with Try again. There's also Clear local history on this device, which starts this device over with new keys."},{"kind":"changed","area":"chat","text":"Someone on an older app sees \"Update Gryt to read it\" in place of each MLS message. Once a DM has moved to MLS it stays there."},{"kind":"changed","area":"chat","text":"Reactions, reports and link previews are off for MLS messages for now. The server has no copy of the message to attach them to, and making a preview would show it the link."},{"kind":"fixed","area":"servers","text":"A server that restarted within five seconds of you connecting got refused as if it had stopped proving who it is, and Gryt stopped reconnecting to it for the rest of the session. That's fixed. The blocked entries it left under Server identity in Settings are cleared once when you update."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.37, which passes MLS messages between devices."}],"post":"direct-messages-now-run-on-mls","image":"https://gryt.chat/blog/art-mls-dms.webp"},{"version":"1.11.46","date":"2026-09-25","line":"Friends are here, updating on Windows no longer leaves you staring at nothing, and you can now see your 24 words to save them in a password manager.","changes":[{"kind":"new","area":"servers","text":"Add friends on a server, accept or decline requests, and remove friends. Your friends list lives only on your devices, and calls from friends now means real friends."},{"kind":"fixed","area":"settings","text":"On Windows, updating closed Gryt and showed nothing for up to a minute and a half. A small window now says Gryt is updating and will open again by itself, and the full build is back in about 15 seconds. Opening Gryt during an update no longer starts a second copy. Updates also download only what changed again, often about 25 MB instead of 130. The first update to this version still installs the old way."},{"kind":"new","area":"settings","text":"If you're signed in, you can now see your 24 words under Settings, Security, and save them in a password manager. They're the way back to your direct messages if you lose every device. If your message backup still uses the older, weaker lock, Gryt offers once to upgrade it."},{"kind":"new","area":"settings","text":"Forgotten your message password? If this device still has your key, you can now set a new one without losing anything."},{"kind":"changed","area":"voice","text":"If a channel's camera, screen sharing or speaking permission is taken away while you're in its call, your camera or share turns off, or you're muted, with a note saying why."},{"kind":"fixed","area":"voice","text":"When a server refuses a voice room, Gryt now says why once and stops, instead of retrying six times and blaming your network."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.34."}]},{"version":"1.11.45","date":"2026-09-25","line":"You can choose who may message you and who may call you, messages sent while a server restarts now go out once it's back, and your message password is much harder to crack.","changes":[{"kind":"new","area":"settings","text":"Privacy settings have Who can send me messages and Who can call me, with a default for everywhere and an override per server. The app also checks every incoming message and call against them itself, so a server that ignores your choice can't get through. Anything it holds back goes in a quiet Filtered list you can open."},{"kind":"changed","area":"voice","text":"By default only people you've written to in a one-to-one can ring you."},{"kind":"fixed","area":"chat","text":"Messages sent while a server was restarting, or cut off on the way, stayed grey until you reloaded, and some never arrived. They show as waiting for the server now, then go out once it's back, in order and only once, in channels, DMs and threads. After five minutes the app gives up and hands the text back."},{"kind":"security","area":"settings","text":"The locked copy of your 24 words is now sealed with Argon2id, which makes guessing your message password far slower. A new password needs at least 12 characters, and you can save a recovery key when you set it. Your existing copy moves over the next time you unlock it, and the old one stays until the new one reads back. An older Gryt app on another device can't open the new format until it updates."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.32."}]},{"version":"1.11.44","date":"2026-09-25","line":"Muted channels are silent now, direct messages show who's online, and blocking someone also stops their calls. Editing a message keeps its mentions, and server owners get a spam filter setting.","changes":[{"kind":"changed","area":"notifications","text":"A muted channel, folder or server is completely silent: no unread count, no mention badge, no bold name, and nothing added to the server icon, the window title or the taskbar badge. Channels set to Only mentions work as before."},{"kind":"new","area":"chat","text":"Direct messages show whether the other person is online, away or offline, with a dot on each conversation and a word in the header. Group chats show how many people are online."},{"kind":"security","area":"voice","text":"Blocking someone also stops their calls now. Their ring never reaches you, neither of you can join a one-to-one call with the other, and their typing indicator doesn't show. The caller's app stops trying straight away instead of retrying for half a minute."},{"kind":"fixed","area":"chat","text":"Editing a message showed its mentions as raw link code. They show as names again, and saving without changes keeps the message exactly as it was."},{"kind":"new","area":"servers","text":"Server settings have a spam filter switch and a sensitivity setting."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.31, with the spam filter and the blocking changes."}]},{"version":"1.11.43","date":"2026-09-24","line":"You can mention @everyone, @here, a role or a #channel now, and notifications show names instead of the raw mention code. There's also a Flatpak for Linux.","changes":[{"kind":"new","area":"chat","text":"Type @everyone to ping everyone who can read the channel, @here for just the people online, or @ and a role name for everyone with that role. It needs the new Mention everyone permission, which owners and admins have by default. Without it the text goes out as plain text and pings nobody."},{"kind":"new","area":"chat","text":"Type # to link a channel. Clicking the link opens it. Someone who can't see that channel gets a grey #private-channel instead, and never learns its name."},{"kind":"new","area":"notifications","text":"Each server has a Suppress @everyone and @here setting, if you'd rather not be pinged by those. Channels set to Only mentions count them as mentions otherwise."},{"kind":"fixed","area":"notifications","text":"A notification for someone joining showed the raw mention code instead of their name, and other notifications showed markdown symbols. They read as plain text now."},{"kind":"new","area":"settings","text":"Linux has a Flatpak now, on the download page and on every release. Install it with flatpak install --user and the file name, and do the same with the next release's file to update."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.29, which handles the new mentions."}]},{"version":"1.11.42","date":"2026-09-24","line":"Your camera and screen share now send only as much as the people watching actually see, and pause while nobody can see them, which saves your upload for everything else. On a phone-width window the call sheet shows the video tiles again instead of a thin strip.","changes":[{"kind":"new","area":"voice","text":"The app tells the voice server how big it draws each video. Your camera and screen share send at the largest size anyone is watching them at, and pause while nobody can see them, for example when everyone has the call minimized. The quality you pick in the camera and share menus is still the most they'll ever send. It needs a server on 1.10.27 or later; on older servers video works as before."},{"kind":"fixed","area":"voice","text":"In a narrow window the call sheet squeezed the video tiles into a strip about 30 pixels tall. They fill the sheet now."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.28, which no longer crashes when a file download fails partway through."}]},{"version":"1.11.41","date":"2026-09-24","line":"The call bar shows what's on at a glance, and your camera and screen share each open a menu while they're live, so you can change the quality, switch source or stop. Channels only show the buttons their rules let you use, and muted channels can be hidden from the sidebar.","changes":[{"kind":"changed","area":"voice","text":"The call bar's buttons change color and icon with what's on: red and crossed out when you're muted or deafened, green while your camera or screen share is live. A lock shows when a moderator muted you."},{"kind":"new","area":"voice","text":"While your camera or screen share is on, its button opens a menu. You can change the quality without stopping, switch to another camera or window, or stop. The people watching keep seeing you the whole time."},{"kind":"fixed","area":"voice","text":"Cancelling the picker while switching to another window marked your share as stopped but left the capture running. The share you had keeps going now."},{"kind":"fixed","area":"voice","text":"In a very narrow window the mic and leave buttons were cut off. The call bar wraps onto two rows now."},{"kind":"changed","area":"servers","text":"If a channel's rules don't let you do something, its button is gone in that channel: reactions, attachments, editing, deleting, reporting, threads, new topics, camera and screen share. A channel you can read but not post in says so where the message box would be. A camera or share you already had on keeps its button so you can turn it off."},{"kind":"new","area":"notifications","text":"Muted channels can be hidden from the sidebar, from the server's right-click menu. The channel you're in, your voice channel and any channel with a mention stay. A Hidden row at the bottom of the list brings them back."},{"kind":"fixed","area":"chat","text":"A thread reply deleted while the thread was loading could come back. It stays gone now, and a burst of thread replies over the send limit no longer leaves some of them stuck pending."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.26, which tells the app what you may do in each channel."}]},{"version":"1.11.40","date":"2026-09-24","line":"A thread reply that arrived while you were loading the thread no longer goes missing, and a burst of refused messages no longer leaves the rest of your queue stuck. Speaking rings and latency badges now survive a server restart, and a video in chat has its real shape before it loads instead of jumping around.","changes":[{"kind":"fixed","area":"voice","text":"After a server restart, the speaking ring and the latency badge on someone's tile could stay blank for several seconds even though their tile came back right away. Both come back with it now."},{"kind":"fixed","area":"voice","text":"Turning your camera off right as you joined a call could leave a screen share you started afterward showing the camera's video instead of its own, and turning the camera back on could then bump the share off screen. Camera and screen share each keep their own video now."},{"kind":"fixed","area":"chat","text":"A reply that arrived in a thread while its first page was still loading could vanish once the page came in, whether it was someone else's message or your own. It stays now."},{"kind":"fixed","area":"chat","text":"A refused message didn't say which one it was, so a burst of refusals settled the wrong rows in your retry queue and left the rest stuck pending until you reloaded. Each refusal now clears the right one."},{"kind":"fixed","area":"chat","text":"A video in chat guessed its shape, then jumped once it started loading and again once you pressed play. It has its real shape from the start now."},{"kind":"new","area":"settings","text":"In Server settings, the version chip next to a server's version now opens that server's release notes, listing what's changed since you're on it and how to update."},{"kind":"fixed","area":"settings","text":"Check for Updates never answered on the Microsoft Store build, so pressing it sat on Checking forever. It now says the Store keeps you up to date."}]},{"version":"1.11.39","date":"2026-09-24","line":"A muted member now sees it in the chat box, with when the mute lifts, and keeps what they typed. Removing a server while its call is reconnecting now lets go of your microphone, and What's New keeps each section's heading in view.","changes":[{"kind":"fixed","area":"chat","text":"Sending a message while muted only showed a generic error toast. The chat box now says you're muted and, if there's an end time, when it lifts, and keeps what you typed instead of clearing it."},{"kind":"fixed","area":"voice","text":"A call still reconnecting when you removed its server kept your microphone open. Removing the server now ends the call and releases the mic."},{"kind":"changed","area":"settings","text":"The What's New list keeps each section's heading pinned at the top while you're reading it, with a small icon next to the name."}]},{"version":"1.11.38","date":"2026-09-23","line":"The thread panel sits beside your conversation on a wide window instead of covering it, and you can reach the messages behind it again. Threads stop offering buttons the server turns down, you can close one rather than only reopen it, and a message that fails twice hands your text back instead of sitting there.","changes":[{"kind":"fixed","area":"chat","text":"Mark solved and the tag chips showed up for everyone, even though only the thread's author or a moderator can use either. Both are gated to those two now."},{"kind":"fixed","area":"chat","text":"A closed thread still drew a live composer, and sending into it failed with a toast. It shows a line saying the thread is closed instead."},{"kind":"fixed","area":"chat","text":"Deleting a message deletes its thread's replies too, and the confirm didn't say so. It now counts them: \"This deletes the message and the 2 replies in its thread.\""},{"kind":"fixed","area":"chat","text":"A thread whose root message was gone left the panel blank. It says the message it started from is gone now."},{"kind":"fixed","area":"chat","text":"Starting a thread or a forum topic with no connection sent into a dead socket, and the composer sat disabled waiting on a reply that couldn't come. Both check the connection first now."},{"kind":"fixed","area":"chat","text":"A closed forum topic had no way to reach it, because the topic list filtered it out. There's a Closed filter now, and a closed topic carries a chip in the list."},{"kind":"changed","area":"chat","text":"From 1164px wide, the thread panel sits beside the conversation instead of covering it, and the conversation keeps its own width instead of losing it to the panel. Below that width the panel still takes the whole screen, and a half-written reply survives moving between the two."},{"kind":"new","area":"chat","text":"You can close a thread from the panel's menu now, not only reopen one. A closed thread says what closing means, since it isn't deleting anything and it can be undone."},{"kind":"fixed","area":"chat","text":"A message refused twice sat pending forever, with its spinner never going away. It fails now and hands the text back to the composer."},{"kind":"security","area":"self-hosting","text":"The image worker your desktop app runs for you answered on every address on your network instead of just your own machine. It answers on loopback only now."}]},{"version":"1.11.37","date":"2026-09-23","line":"Threads keep their reply counts across a reload, and five things that were wrong with the thread panel are fixed. Hiding a conversation happens on your device now, and the server stops storing it. Messages get real headings and room to breathe, and unread and mention badges count what you'd count.","changes":[{"kind":"changed","area":"chat","text":"Headings in a message render as real headings now, and the space between blocks scales with your chat text size instead of being fixed pixels, so a heavily formatted message doesn't turn into a grey wall. Long messages fold by line count instead of pixel height, and lists show their bullets again."},{"kind":"fixed","area":"chat","text":"Unread and mention counts were wrong after a reload: mentions could sit unseen with no badge to show it, and a reply inside a thread never added to its channel's count. The badge also showed whichever of the two numbers was bigger instead of the right one. All three are fixed."},{"kind":"fixed","area":"chat","text":"A channel's reply counts now survive a reload. Before, every thread reset to \"0 replies\" until you reopened it."},{"kind":"fixed","area":"chat","text":"Five bugs in the thread panel: deleting any thread in the channel closed whatever thread you had open, a thread you weren't allowed to read loaded forever instead of saying so, Escape inside the composer closed the whole panel instead of just the mention list or emoji picker, a thread opened at its oldest reply instead of its newest, and a failed reply lost its text. All five are fixed, and a failed reply now retries once before handing the text back to you."},{"kind":"changed","area":"chat","text":"Hiding a conversation now happens on your device instead of the server, which no longer stores it. A Hidden section under Messages lists what you've hidden, with an Undo right after you hide something."},{"kind":"fixed","area":"chat","text":"A failed message send now puts your text back in the composer. Before, it only moved focus there and dropped what you'd written."},{"kind":"fixed","area":"voice","text":"Someone's camera could get stuck showing \"Connecting video…\" after their camera restarted mid-call, even though their video was already playing. It shows the video now."},{"kind":"changed","area":"settings","text":"Group settings save as you go now, the same as everywhere else in Gryt. No more Save button for the picture, the name, or adding a member."},{"kind":"fixed","area":"settings","text":"The Audio and Notifications settings pages scrolled sideways at narrow widths. Fixed down to the 300px minimum Gryt supports."},{"kind":"fixed","area":"settings","text":"The settings window could push its title and close button off screen on a short display. It fits the window you have now."},{"kind":"fixed","area":"servers","text":"The add-server and settings buttons in the server rail had no name for a screen reader. They're named now."},{"kind":"fixed","area":"settings","text":"If your connection gave up retrying after fifteen attempts, it stayed down for the rest of the session. Bringing the app back to the front retries it now."},{"kind":"fixed","area":"servers","text":"A new channel briefly showed up twice in the sidebar before settling down. That flash is gone."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.21, which binds to your whole network by default in self-hosted bundles and includes a handful of smaller security fixes."}]},{"version":"1.11.36","date":"2026-09-22","line":"Video stays up when the server restarts, and your camera stays on when a call has to rebuild itself. Channels in a folder show that they follow it, and dragging a folder takes its channels with it. Thanks to Carlo, who sponsored Gryt back in March.","changes":[{"kind":"fixed","area":"voice","text":"When the server restarted during a call, every video tile went blank for three to six seconds, even though the call kept going. Your own tile was drawn as somebody else's until the server knew your new connection. The tiles stay up now."},{"kind":"fixed","area":"voice","text":"If the connection to the server dropped and the call had to be rebuilt from scratch, your camera and screen share got switched off. They stay on now."},{"kind":"changed","area":"servers","text":"For a channel in a folder, Who can use this channel starts with Follow the folder, and that's picked while the channel follows it. Before, it showed the folder's own setting, so a channel in an Everyone folder looked like it was set to Everyone."},{"kind":"changed","area":"servers","text":"Dragging a channel into a folder makes it follow the folder. If the channel has permissions of its own, you're asked first whether to replace them."},{"kind":"fixed","area":"servers","text":"When you drag a folder, its channels now move with it on screen. Before, they only caught up once you let go."},{"kind":"changed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.20, which closes connections properly when it stops."}]},{"version":"1.11.35","date":"2026-09-21","line":"Cameras and screen shares come back when a call reconnects on its own.","changes":[{"kind":"fixed","area":"voice","text":"When a call reconnected on its own, it came back with audio only. Every camera and screen share had been switched off, and everyone's tiles waited for video that never came. They come back with the call now, and leaving a call still turns your camera off."}]},{"version":"1.11.34","date":"2026-09-21","line":"Calls through Cloudflare no longer end when Cloudflare restarts its proxy.","changes":[{"kind":"fixed","area":"voice","text":"When Cloudflare restarted the proxy between you and a server's voice server, Gryt took it as the call ending on purpose. Nothing reconnected, and you dropped out of the call. It reconnects now, the same way it already did when the connection broke."}]},{"version":"1.11.33","date":"2026-09-21","line":"Turning your camera off and on no longer stops your screen share reaching anyone, and the camera holds up a lot better on a slow upload. The + next to Messages starts a conversation or a group, and folders can have their own permissions.","changes":[{"kind":"security","area":"servers","text":"Closing a channel's settings before its permissions had loaded set the channel to Everyone. On a slow connection, that could open a private channel up to the whole server. Closing only saves changes you made now."},{"kind":"security","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.19. It checks a channel's Join voice permission before letting anyone into its call, which only the app did before. And members no longer get the names of folders they can't see into. Update if you host a server from the app."},{"kind":"new","area":"chat","text":"The + next to Messages starts a direct message or a group. It lists the people on your servers you can message. If you're on more than one server, each row says which one the conversation will be on. It replaces New group in a conversation's header."},{"kind":"new","area":"servers","text":"A + next to the server menu creates a channel or a folder. Right-click a folder for Create channel in this folder, or a channel for Create channel below. The create dialog lets you pick the folder too."},{"kind":"new","area":"servers","text":"Folders can have permissions. Set them under Who can use this folder, in the folder's settings. A channel in the folder follows them until you give it its own, and Follow folder hands it back. It needs a server on 1.10.19 or newer."},{"kind":"new","area":"servers","text":"Servers on 1.10.19 or newer give roles a Create groups permission. Without it you can still message people, but you can't start a group or add anyone to one."},{"kind":"changed","area":"servers","text":"Create channel and Create folder left the server menu for the +, and Pin sidebar moved into the server menu. Anyone with Manage channels gets the +. The old menu items were only there for owners and admins."},{"kind":"changed","area":"voice","text":"If a channel doesn't set its own bitrate, your microphone gets up to 64 kbps. It was 510, and on a slow upload that could leave your camera almost nothing. A channel's own bitrate still applies, and eSports mode stays at 128."},{"kind":"changed","area":"voice","text":"On a good connection your camera may start at a lower resolution than before, and go up from there. It used to go out at 1080p straight away."},{"kind":"changed","area":"chat","text":"Opening a direct message no longer lights up its server in the server list, as if you'd opened the server. The conversation's header names the server instead."},{"kind":"changed","area":"settings","text":"What's new starts each release with its one-line summary. Security fixes come next, in a red block of their own, and the rest sit under headings like Voice & video and Chat."},{"kind":"fixed","area":"voice","text":"If you turned your camera off and on and then shared your screen, everyone else was told your screen wasn't coming through. Sharing first and then turning the camera off and on meant the camera never came back. Both work now."},{"kind":"fixed","area":"voice","text":"Gryt re-added your camera about four times a second during a call. On a slow upload each re-add cost a keyframe, and the camera could drop to a few frames a second. It only does that when the camera changes now, and the same goes for a screen share."},{"kind":"fixed","area":"voice","text":"A call that reconnected on its own lost the channel's bitrate and eSports mode. It keeps them now."},{"kind":"fixed","area":"voice","text":"The video debug overlay's report count always showed a dash. It counts round-trip samples now, next to the remote RTT. The RTT itself shows too once the server's voice server is on 1.0.69 or newer."},{"kind":"fixed","area":"chat","text":"New group made a group nobody could see. Messages only listed a conversation once somebody had written in it, and nothing opened the new group. Groups show up as soon as they're made now, and the new one opens for whoever made it."},{"kind":"fixed","area":"chat","text":"There was no way to open a group's settings, so nobody could rename a group, add people or leave it. A group's header has a Group settings button now."},{"kind":"fixed","area":"chat","text":"A renamed group kept its old name in Messages, and direct message errors showed up twice."},{"kind":"fixed","area":"chat","text":"In a very narrow window, direct messages had no conversation list, and a long name could push Call off the edge. A conversation there has a back button to the list now, and long names get cut short. On a phone and in small windows, the list's right edge isn't cut off any more."},{"kind":"fixed","area":"servers","text":"Editing a folder said Spacer settings. It says Folder settings now, and a folder's right-click menu shows its name instead of \"folder\"."},{"kind":"fixed","area":"self-hosting","text":"The voice server built into the desktop app is updated to 1.0.69. On a server you host, a camera that got off to a slow start no longer stays stuck at a low bitrate for the rest of the call."}]},{"version":"1.11.32","date":"2026-09-21","line":"Muted channels stay quiet on the server you have open, and clicking a notification takes you to its channel. You can also share an open server with just its address.","changes":[{"kind":"new","area":"servers","text":"On an open server, anyone can copy an invite link from the server menu. The link only has the server's address in it, no code, so the server needs a public address. Opening it or pasting it into Add a server brings up that server's join dialog."},{"kind":"new","area":"servers","text":"If a server only takes accounts and you're signed out, the invite dialog has Sign in to join, and the invite comes back once you've signed in."},{"kind":"new","area":"notifications","text":"Clicking a notification for a channel message opens that server and channel. It used to just bring Gryt to the front."},{"kind":"new","area":"notifications","text":"Admins can set a channel's default notifications when they create or edit it. Automated channels default to Nothing, existing ones included. A channel's Notifications menu shows what its Default works out to. It needs a server on 1.10.18 or newer."},{"kind":"changed","area":"settings","text":"Settings are regrouped by what you're trying to change. My servers, Adding servers and Server identities sit together under Servers. AFK timeout moved to Voice, and keeping server sign-in tokens between launches moved to Security."},{"kind":"changed","area":"voice","text":"Starting a screen share shows a loading message, and other people see whose share is on its way instead of Connecting screen."},{"kind":"changed","area":"voice","text":"With your camera and a screen share both on, the screen share gets your upload first. When bandwidth is short, it's the camera that drops in quality."},{"kind":"changed","area":"chat","text":"Pasting more than 4,000 characters attaches the text as pasted-text.txt. That much text in the message box could freeze Gryt. Where you can't attach files, Gryt says it's too long and leaves the box alone."},{"kind":"changed","area":"chat","text":"Webhook cards have their own background now, so a hovered message doesn't show through. Clicking anywhere on one opens its link."},{"kind":"changed","area":"voice","text":"The video debug overlay, under App > Advanced, shows a lot more about the video you send and receive, like target bitrate, dropped frames, packet loss and the connection path."},{"kind":"fixed","area":"notifications","text":"With Gryt in the background, the server you had open notified you about every message, muted channels included. It follows your notification settings now. At Only mentions, being mentioned raises a desktop notification, in a thread too."},{"kind":"fixed","area":"voice","text":"Everyone else could be stuck on a waiting tile after your camera restarted. And if you focused a tile during your second screen share in a call, the share could go blank for them. Both come through now."},{"kind":"fixed","area":"servers","text":"A dropped connection that's back within three seconds no longer greys out the server or says Reconnecting."},{"kind":"fixed","area":"voice","text":"A call that dropped while you were looking at another server tried to reconnect through that server. It reconnects to the call's own server now."},{"kind":"fixed","area":"voice","text":"After Gryt gave up on reconnecting a call, it could put you back in that call later, microphone on, when the server came back. A call it gives up on stays ended now."},{"kind":"fixed","area":"voice","text":"Picking another microphone while the first was still starting could get you the old one anyway. Leaving a call at that moment could keep the microphone open with nothing using it."},{"kind":"fixed","area":"servers","text":"Switching servers could open the first text channel instead of the one you last had open there."},{"kind":"fixed","area":"servers","text":"A folder whose channels are all hidden from you no longer shows up as an empty heading."},{"kind":"fixed","area":"chat","text":"When a file failed to upload, the message stayed pending and what you'd typed was gone. It's marked failed now, and your text and files go back in the box. Cancelling \"Send this without encryption?\" puts them back too."},{"kind":"fixed","area":"settings","text":"Tall dialogs, Add a server included, scroll inside a short window instead of running off it. An open group in the settings list no longer cuts off its last pages either."},{"kind":"fixed","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.18. On a server you host, people stay in the channel through a brief drop mid-call, and switching voice channels doesn't hang anyone up."}]},{"version":"1.11.31-beta.1","date":"2026-09-20","line":"Settings category menus expand to their full height instead of clipping pages in the navigation rail.","changes":[{"kind":"fixed","area":"settings","text":"Expanded settings categories, including Voice & video, no longer hide their last pages when the settings rail is short. The category keeps its full height and the rail scrolls instead."}],"channel":"beta"},{"version":"1.11.30-beta.1","date":"2026-09-20","line":"Screen sharing gets priority over webcam video, muted channels stay quiet, notification clicks open the right channel, and video debug makes dropped frames easier to diagnose.","changes":[{"kind":"changed","area":"voice","text":"When webcam and screen share are both on, Gryt now gives the screen share higher WebRTC priority so desktop video holds up better when upload bandwidth is tight."},{"kind":"fixed","area":"notifications","text":"Muted channels on the server you are currently viewing no longer play the message sound, raise an OS notification or increment the notification badge. Messages still stay unread in the sidebar."},{"kind":"fixed","area":"notifications","text":"Clicking a desktop notification now opens the server and channel that message came from instead of only focusing the Gryt window."},{"kind":"changed","area":"voice","text":"Video Debug now shows recent inbound frame-drop and packet-loss rates, decode and processing timing, jitter-buffer and frame-assembly timing, freezes, and average encode time per frame."}],"channel":"beta"},{"version":"1.11.29-beta.1","date":"2026-09-19","line":"Settings are grouped around what you are trying to change, so server, chat, voice, appearance and app controls are easier to find.","changes":[{"kind":"changed","area":"settings","text":"User settings is reorganized into clearer sections: Account & security, Servers, Chat & notifications, Voice & video, Appearance, App and About."},{"kind":"changed","area":"settings","text":"My servers, adding-server preferences and server identities now live together under Servers. Manage server and settings search open the new locations."},{"kind":"changed","area":"settings","text":"Chat and notifications now share a section, AFK timeout sits with Voice, and keeping server sign-in tokens between launches sits under Security."},{"kind":"changed","area":"settings","text":"Support Gryt stays pinned at the bottom of settings and uses Gryt's accent across the row, so it reads as a support action rather than a warning."}],"channel":"beta"},{"version":"1.11.28-beta.1","date":"2026-09-19","line":"Webcams recover without leaving a waiting tile, huge chat pastes become text files, screen shares show when they are starting, and voice recovers more cleanly after a brief disconnect.","changes":[{"kind":"fixed","area":"voice","text":"A camera could be publishing normally while everyone else stayed on a waiting tile after Gryt reacquired the device. Gryt keeps advertising the WebRTC stream ID the call is actually sending now."},{"kind":"fixed","area":"chat","text":"Pasting more than 4,000 characters into chat could freeze or crash the client before you could remove it. Gryt keeps the paste out of the editor and attaches the full text as pasted-text.txt instead."},{"kind":"changed","area":"voice","text":"Starting a screen share now shows a loading state, and other people see who is starting a share instead of a generic connecting message. If it still has not arrived after 15 seconds, the tile says whose screen is not coming through."},{"kind":"fixed","area":"voice","text":"A call recovering from a brief disconnect keeps using the server the call is actually on, even if you are browsing another server, and the server gives reconnecting voice time to reappear before removing it."},{"kind":"fixed","area":"voice","text":"Changing microphones while one is still opening no longer lets the old request win, and the native app starts the platform default microphone correctly again."},{"kind":"fixed","area":"settings","text":"Tall dialogs stay inside a short browser window and scroll vertically instead of putting controls outside the viewport."},{"kind":"changed","area":"voice","text":"The video debug overlay shows more bandwidth, sender, candidate-path and RTCP details, making camera and screen-share problems easier to diagnose."}],"channel":"beta"},{"version":"1.11.27","date":"2026-09-18","line":"Camera and screen shares no longer get stranded when voice signaling blips, and menus and pickers stay inside small windows.","changes":[{"kind":"fixed","area":"voice","text":"Starting a camera or screen share while the voice signaling connection was briefly unavailable could leave the video missing for other people until you toggled it or rejoined. Gryt keeps that publish request and sends it as soon as signaling is ready."},{"kind":"fixed","area":"settings","text":"Selects, menus, context menus, comboboxes and autocomplete lists could run past the edge of a short or narrow window. They stay on screen and scroll now."}]},{"version":"1.11.26","date":"2026-09-16","line":"Gryt asks you to agree to its terms before your first message, and joining voice no longer sometimes waits 20 seconds to connect.","changes":[{"kind":"new","area":"chat","text":"The first time you send a message, Gryt asks you to agree to the Terms of Use and the Community Guidelines. Not now keeps your draft, and you're only asked again if the terms change."},{"kind":"fixed","area":"voice","text":"Joining voice could sit on connecting for about 20 seconds when the voice server's connection details arrived before its call setup. Gryt holds them until the call is ready now."},{"kind":"changed","area":"settings","text":"The activity field in your profile asks \"What are you up to?\" instead of showing an example status."}]},{"version":"1.11.25","date":"2026-09-15","line":"The server built into the desktop app gets this week's security fixes, owners are told when a server needs a security update, and files saved from encrypted messages come out readable.","changes":[{"kind":"security","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.15, which keeps channel messages and sign-in tokens from reaching people who should not have them. Update if you host a server from the app."},{"kind":"new","area":"self-hosting","text":"Owners and admins see a notice when the server they are on has a known security issue, with the version that fixes it."},{"kind":"fixed","area":"chat","text":"Save As, Copy Image and Download on a file in an encrypted conversation saved the encrypted copy. They save the real file now."},{"kind":"fixed","area":"settings","text":"With Automatic updates off, Check for Updates and starting at login still downloaded updates. They only tell you about them now."},{"kind":"changed","area":"servers","text":"Moving a guest to your account works when your account is already on the server, and saying no switches this device to your account there."},{"kind":"fixed","area":"chat","text":"Messages that arrived before a conversation was opened showed above the older ones."},{"kind":"fixed","area":"servers","text":"Adding a server you were already in from another address added it a second time."},{"kind":"fixed","area":"settings","text":"User settings cut off its pages in a narrow window, and a server you start from the app reconnects as soon as it is running."}]},{"version":"1.11.24","date":"2026-09-15","line":"A server you host from the desktop app only accepts voice server registration from the same computer.","changes":[{"kind":"security","area":"self-hosting","text":"The voice server built into the desktop app took server registrations from anyone on your network. It only listens for them on the computer itself now, and calls from your network work as before."}]},{"version":"1.11.23","date":"2026-09-15","line":"The desktop app clears out old copies of its built-in server, updates land on the newest release, Enter sends on the first press, and servers you host get a Manage server item.","changes":[{"kind":"fixed","area":"self-hosting","text":"The desktop app kept a full copy of its built-in server for every version it had ever run, which could add up to several gigabytes. It removes the old ones now and keeps the current one and the two before it."},{"kind":"fixed","area":"settings","text":"If a newer release came out while an update was waiting, pressing update installed the older one and then offered the newer one. It checks first and installs the newest."},{"kind":"fixed","area":"chat","text":"After pasting a link with a port, such as http://192.168.50.196:3000, the first Enter added a new line instead of sending. Times like 12:30 are no longer turned into emoji either."},{"kind":"new","area":"self-hosting","text":"A server this app hosts has Manage server in its menu, which opens its card in My servers with Start and Stop."},{"kind":"fixed","area":"self-hosting","text":"Two Gryt apps hosting servers on one computer could end up sharing one voice server. Each gets its own ports now."},{"kind":"fixed","area":"settings","text":"Dialogs ran off narrow windows and pushed their buttons out of view. The prompt about moving a guest to your account is also clearer about what each choice does."},{"kind":"fixed","area":"self-hosting","text":"Deleting a server you host left its entry in the server list when you had joined it by a LAN address or a .local name."},{"kind":"changed","area":"settings","text":"What's new shows a label on every change instead of one per group."},{"kind":"fixed","area":"settings","text":"A long selected option no longer stretches a dropdown past its space, and About Gryt gives the copyright as 2022 to 2026."}]},{"version":"1.11.22","date":"2026-09-15","line":"Encrypted videos wait for you to press play, Check for updates says when GitHub did not answer, a server you host shows as starting during a call, and webhook avatars are resized.","changes":[{"kind":"security","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.14, which stops link previews and webhook pictures from reaching addresses inside your network. Update if you host a server from the app."},{"kind":"fixed","area":"settings","text":"When GitHub did not answer a check for updates, Gryt said there were no published versions. It says GitHub could not be reached now, and when to try again if GitHub gave a time."},{"kind":"fixed","area":"self-hosting","text":"A server you host from the app showed as reconnecting while it started if you were in a call anywhere. It shows as starting."},{"kind":"fixed","area":"settings","text":"The Linux packages listed the gryt:// link type up to five times in their desktop entry. They list it once."},{"kind":"changed","area":"servers","text":"A webhook's avatar is resized when you pick it, like a member avatar. On a server that has not updated yet, Gryt says the server needs an update first."},{"kind":"changed","area":"chat","text":"Videos in encrypted direct messages download and decrypt when you press play, instead of when the conversation opens."},{"kind":"fixed","area":"servers","text":"A video in the reports panel no longer restarts when Gryt renews its sign-in token, and the moderation buttons stay inside the dialog."}]},{"version":"1.11.21","date":"2026-09-15","line":"On a narrow window, Server settings shows the server, voice and image versions under the page picker again.","changes":[{"kind":"fixed","area":"servers","text":"The server, voice server and image worker versions went missing from Server settings on narrow windows. They sit under the page picker now."}]},{"version":"1.11.20","date":"2026-09-15","line":"Server settings fit the window at every width, and on a phone you pick a settings page from a list instead of a squeezed sidebar.","changes":[{"kind":"fixed","area":"servers","text":"Webhook rows ran past the edge of Server settings and cut off Create webhook. Every settings page now fits the dialog."},{"kind":"changed","area":"servers","text":"On a narrow window, Server settings shows a list to pick the page from instead of a sidebar that left almost no room for the page itself."}]},{"version":"1.11.19","date":"2026-09-15","line":"Webhooks can post cards, and pictures load on a server you joined from Add a server without joining again.","changes":[{"kind":"new","area":"chat","text":"Messages from a webhook can carry cards with a title, description, fields, images, an author and a footer."},{"kind":"fixed","area":"servers","text":"Joining a server from Add a server did not keep the key pictures need, so every picture on it failed to load until you joined again."},{"kind":"fixed","area":"chat","text":"A webhook posting under a different name was grouped under the name above it."}]},{"version":"1.11.18","date":"2026-09-15","line":"A webhook's avatar saves when you pick one, instead of the settings saying it was updated when nothing changed.","changes":[{"kind":"fixed","area":"servers","text":"Picking an avatar for a webhook said Avatar updated and never saved it. It saves now, and the message only shows once it has."}]},{"version":"1.11.17","date":"2026-09-15","line":"Picking a picture for a group no longer changes your own avatar to it.","changes":[{"kind":"fixed","area":"chat","text":"Choosing a picture for a group also made it your avatar on that server. The group gets the picture now and your avatar stays as it was. On a server that has not updated yet, Gryt says the server needs an update instead."}]},{"version":"1.11.16","date":"2026-09-14","line":"If Gryt could not reach accounts when it started, it signs you back in once they answer again, without a restart.","changes":[{"kind":"security","area":"self-hosting","text":"The server built into the desktop app is updated to 1.10.8, so a file posted in a private channel or a direct message only opens for people who can see that conversation. Update if you host a server from the app."},{"kind":"fixed","area":"settings","text":"Opening Gryt while accounts were down left you signed out until you restarted it. Gryt now tries again in the background and signs you back in once accounts answer, on the desktop app and in the browser."}]},{"version":"1.11.15","date":"2026-09-14","line":"Videos in chat play in Gryt's own player, and Gryt tells you when it cannot reach accounts instead of only saying it is taking a while.","changes":[{"kind":"new","area":"chat","text":"Videos in chat and in link previews play in Gryt's own player, with the file name, size and time on top and volume that follows your chat media setting."},{"kind":"fixed","area":"chat","text":"If a video's link has gone stale, the player picks up a fresh one and carries on from the same spot instead of showing an error."},{"kind":"fixed","area":"settings","text":"Opening Gryt while accounts were down only said it was taking longer than it should. It now says it cannot reach Gryt accounts, or that you are offline, and a banner stays up until accounts answer again."}]},{"version":"1.11.14","date":"2026-09-14","line":"Videos in chat wait for you to press play, the members list drops its grey boxes, and Check for updates stops calling being up to date an error.","changes":[{"kind":"changed","area":"chat","text":"Videos in chat and in link previews show their thumbnail and a play button. Nothing downloads until you press it."},{"kind":"fixed","area":"chat","text":"A playing video no longer starts loading again when Gryt renews its sign-in token in the background."},{"kind":"changed","area":"servers","text":"Names in the members list sit straight on the sidebar. A row turns grey only when you hover it or focus it with the keyboard."},{"kind":"fixed","area":"settings","text":"On the beta channel, Check for updates said there were no published versions when you were already on the newest one. It says Gryt is up to date now."},{"kind":"changed","area":"servers","text":"Each server renews its token on its own schedule, instead of every server renewing at the same moment every four minutes."}]},{"version":"1.11.13","date":"2026-09-14","line":"If the sound for a screen share stops being captured partway through, Gryt drops the audio track, so the people watching are not left with a silent one.","changes":[{"kind":"fixed","area":"voice","text":"When the sound for a screen share stopped being captured, the people watching kept getting a silent audio track. Gryt drops that track now."}]},{"version":"1.11.12","date":"2026-09-14","line":"What's new now covers every release since the version you last used, screen sharing on macOS sends its sound, and Show me around starts the tour.","changes":[{"kind":"new","area":"settings","text":"What's new lists every release since the version you last used, newest first. Before, it only showed the version you were on."},{"kind":"fixed","area":"voice","text":"Sharing your screen on macOS sent no sound, even with something playing. It does now, and if the sound cannot be captured, Gryt tells you."},{"kind":"fixed","area":"settings","text":"Show me around on the welcome screen did nothing. It starts the tour now."},{"kind":"changed","area":"voice","text":"The addresses in the advanced latency panel stay hidden until you choose to show them."}]},{"version":"1.11.11","date":"2026-09-14","line":"Direct messages keep the newest conversation at the top and show each server's own icon. Hovering a server or your voice tile no longer shows an address.","changes":[{"kind":"fixed","area":"chat","text":"A conversation moves to the top of the list whenever a new message arrives. Before, only its first message did that."},{"kind":"fixed","area":"chat","text":"Each conversation shows its server's own icon instead of a generic planet."},{"kind":"fixed","area":"chat","text":"An empty conversation you had open drops out of the list when you open another one."},{"kind":"changed","area":"servers","text":"Hovering a server in the sidebar, or the latency on your own voice tile, no longer shows the server's address."}]},{"version":"1.11.10","date":"2026-09-14","line":"Link previews and X posts that fail to load try again instead of disappearing.","changes":[{"kind":"fixed","area":"chat","text":"A link preview that ran into the server's limit stayed hidden until you restarted Gryt. It now waits and then loads."},{"kind":"fixed","area":"chat","text":"A link preview or an X post that failed because of a hiccup on the server's side disappeared. It now tries again a couple of times first."}]},{"version":"1.11.9","date":"2026-09-10","line":"The messages button now takes you back to where you were, so you can check your direct messages and come straight back.","changes":[{"kind":"new","area":"chat","text":"Clicking the messages button while you are in your direct messages takes you back to the server and channel you came from."},{"kind":"fixed","area":"chat","text":"If you opened a conversation with no messages in it, going back to your direct messages later showed it again, even though it was gone from the list. Your most recent conversation opens instead."},{"kind":"fixed","area":"servers","text":"The Servers on your network button did nothing while your direct messages were open."}]},{"version":"1.11.8","date":"2026-09-10","line":"Direct messages and servers each keep to their own view now, and opening direct messages takes you straight to your latest conversation.","changes":[{"kind":"fixed","area":"chat","text":"Direct messages no longer show a server's channel, and a server no longer shows your direct messages. On 1.11.7 one could turn up in the other's place, so a conversation looked like it belonged to a server."},{"kind":"changed","area":"chat","text":"Opening direct messages opens your most recent conversation, instead of an empty view."}]},{"version":"1.11.7","date":"2026-09-10","line":"Direct messages work like a place of their own now, and Gryt opens back up on the page you left it on.","changes":[{"kind":"changed","area":"chat","text":"Direct messages are a place you go, like a server. The button beside the servers opens them, and picking a server takes you back."},{"kind":"changed","area":"chat","text":"Clicking somebody in the member list takes you to your conversation with them in direct messages."},{"kind":"changed","area":"chat","text":"A conversation nobody has written in only shows in the list while you are looking at it. Click somebody else, or go anywhere else, and it drops out until one of you writes."},{"kind":"new","area":"settings","text":"Gryt remembers where you were. Moving between a server and your direct messages puts you back where you left each one."},{"kind":"new","area":"settings","text":"Gryt opens on the page you closed it on, instead of the top server in the list."}]},{"version":"1.11.6","date":"2026-09-10","line":"The note you are reading this in scrolls now, and closes when you click away. A direct message marks one badge instead of two, and on a phone the direct messages redesign finally arrives.","changes":[{"kind":"fixed","area":"settings","text":"This note scrolls when it is longer than your screen. It used to grow past the top and the bottom of the window, taking the greeting and the Done button with it."},{"kind":"changed","area":"settings","text":"Clicking outside this note closes it, and you can open it again from Settings under About."},{"kind":"fixed","area":"notifications","text":"A direct message marks one badge instead of two. It counted on the direct messages button and on the server icon it arrived at, so reading it changed both."},{"kind":"changed","area":"phone","text":"On a phone, tapping somebody in the member list opens your conversation with them, and direct messages have their own space reached from the channels panel. The desktop got this last release and the phone did not."}]},{"version":"1.11.5","date":"2026-09-09","line":"Direct messages have a space of their own, reached from a button above the servers. Gryt always says when you are in a voice call, and it stops retrying a server that is never going to answer.","changes":[{"kind":"new","area":"chat","text":"Direct messages have a space of their own, on a button above the servers. It holds every conversation you have, across every server you are on, and unread ones count on that button."},{"kind":"changed","area":"chat","text":"Clicking somebody in the member list opens your conversation with them. Direct messages are no longer a category in the channel list, and one you have not read shows on that person's row."},{"kind":"fixed","area":"voice","text":"The app always says when you are in a voice call. A call could get stuck reading as still connecting, and while that lasted the microphone mark on the server and the controls above your picture were both hidden. The call was up and your microphone was open the whole time."},{"kind":"changed","area":"voice","text":"The microphone mark on a server says whether sound is leaving your machine, and appears for a call that is still connecting rather than only one that is up."},{"kind":"changed","area":"servers","text":"Gryt gives up on a server that is not answering after about two minutes and says it is unreachable, with a button to try again. It used to retry for as long as the app was open."},{"kind":"changed","area":"servers","text":"The notice that Gryt is reconnecting to a server can be dismissed, and goes on its own after six seconds."},{"kind":"fixed","area":"settings","text":"Menus open where they should when the interface is scaled. The desktop app scales with Chromium's own zoom now rather than with CSS."},{"kind":"fixed","area":"self-hosting","text":"A server you create keeps the name you gave it."},{"kind":"security","area":"chat","text":"Gryt warns you before a second device breaks encryption with the people you talk to, and offers to carry your message key across instead."},{"kind":"changed","area":"chat","text":"A message with a link no longer loads the preview until you ask for it. Reading a channel used to fetch pages from whatever sites had been linked in it."},{"kind":"fixed","area":"chat","text":"A direct conversation with nothing in it no longer says the server can read it, directly under a banner saying it cannot."},{"kind":"fixed","area":"chat","text":"A message arriving in a direct conversation no longer makes it jump, or turns the messages already on screen back into unreadable text."},{"kind":"fixed","area":"chat","text":"Gryt says when the other person's app is sending in the clear."},{"kind":"changed","area":"notifications","text":"A channel with something unread is visible in the sidebar, on a colour of its own rather than the red Gryt uses for deleting things."},{"kind":"fixed","area":"servers","text":"Gryt stops announcing the servers on your network as new every time it starts. Which ones this machine has already looked at is remembered on the device now, rather than against whoever was signed in at the moment you looked."}]},{"version":"1.11.4","date":"2026-09-09","line":"Gryt no longer pulls its window in front of a game to show you something, and the notice about what changed tries again when the first answer is empty.","changes":[{"kind":"fixed","area":"settings","text":"Gryt no longer puts its window above everything else when it has something to show you. An update notice while you were in a game pulled the app in front of it."},{"kind":"fixed","area":"settings","text":"The notice about what changed asks the site again when the first answer has nothing in it, and asks for a fresh copy rather than the one it already had. On 1.11.3 an app that updated before the site had rebuilt saw nothing."}]},{"version":"1.11.3","date":"2026-09-09","line":"The login service going down no longer signs you out, because a refresh that cannot reach it now waits and tries again.","changes":[{"kind":"fixed","area":"settings","text":"The login service going down no longer signs you out. A refresh that cannot reach it waits and tries again, and only a token the service has actually turned down ends your session."}]},{"version":"1.11.2","date":"2026-09-09","line":"The notice about what changed now appears, instead of reading your settings too early and deciding every time that you were a new install.","changes":[{"kind":"fixed","area":"settings","text":"The notice about what changed now appears. It had been reading your settings before they had loaded, so every launch decided you were a new install and said nothing."}]},{"version":"1.11.1","date":"2026-09-09","line":"Nothing changed in the app. We bumped the version to test the notice you are reading this in."},{"version":"1.11.0","date":"2026-09-09","line":"Gryt says what changed the first time you open a new version. Voice no longer sends your microphone twice when a connection rebuilds, and messages in a thread sit in from the panel edge. Links are underlined wherever they appear.","changes":[{"kind":"new","area":"settings","text":"Gryt says what changed the first time you open a new version, sorted into what is new, what is fixed and anything about security."},{"kind":"fixed","area":"voice","text":"Voice no longer sends your microphone twice when a connection rebuilds."},{"kind":"fixed","area":"chat","text":"Messages in a thread sit in from the panel edge instead of against it."},{"kind":"changed","area":"settings","text":"Links are underlined wherever they appear, rather than only under the pointer."}],"post":"gryt-tells-you-what-changed","image":"https://gryt.chat/blog/whats-new-modal.webp"},{"version":"1.10.3","date":"2026-09-08","line":"Joining voice waits for a slow microphone instead of giving up after six seconds and telling you it is unavailable. A role on the hover card shows its name rather than its id, and the role everybody starts with no longer takes a pill of its own.","changes":[{"kind":"fixed","text":"Joining voice waits for a slow microphone instead of giving up after six seconds and telling you it is unavailable."},{"kind":"fixed","text":"A role on the hover card shows its name rather than its id, and the role everybody starts with no longer takes a pill of its own."}]},{"version":"1.10.2","date":"2026-09-08","line":"A message Gryt cannot encrypt is no longer sent in the clear. Gryt asks before reading your process list now, and on a tiling window manager it draws no titlebar at all.","changes":[{"kind":"security","text":"A message Gryt cannot encrypt is no longer sent in the clear."},{"kind":"security","text":"Gryt asks before reading your process list now."},{"kind":"fixed","text":"On a tiling window manager it draws no titlebar at all."}],"note":true},{"version":"1.10.1","date":"2026-09-08","line":"Reply and edit inside a thread, scroll back through a long one, and see what it has unread without opening it. Mark a channel, a folder or a whole server as read, and install on an Intel Mac or from an RPM.","changes":[{"kind":"new","text":"Reply and edit inside a thread, scroll back through a long one, and see what it has unread without opening it."},{"kind":"new","text":"Mark a channel, a folder or a whole server as read."},{"kind":"new","text":"Install on an Intel Mac or from an RPM."}]},{"version":"1.10.0-beta.1","date":"2026-09-08","line":"The first build with mark-as-read, the Intel Mac download and the RPM in it.","changes":[{"kind":"new","text":"Mark a channel, a folder or a whole server as read."},{"kind":"new","text":"Install on an Intel Mac or from an RPM."}],"channel":"beta"},{"version":"1.9.24","date":"2026-09-07","line":"Servers can run plugins, and you can see what a server runs before you join."},{"version":"1.9.22-beta.1","date":"2026-09-07","line":"Packaging only. Nothing changed in the app.","channel":"beta"},{"version":"1.9.21","date":"2026-09-06","line":"Your most-used reactions sit on the hover bar, and names in chat are coloured by role the way the member list already was."},{"version":"1.9.20","date":"2026-09-06","line":"Signing in through a browser comes back to the app on the Linux AppImage. It had nowhere to return to."},{"version":"1.9.19","date":"2026-09-05","line":"A sidebar folder reads as a heading instead of looking like another channel."},{"version":"1.9.18","date":"2026-09-05","line":"Folders in the sidebar, with channels you drag into them. Muting somebody now stops them typing as well as talking."},{"version":"1.9.17","date":"2026-09-05","line":"Styling the release before this one dropped is back, and switching identity says what happens to the old one first."},{"version":"1.9.16","date":"2026-09-04","line":"Packaging only. Nothing changed in the app."},{"version":"1.9.15","date":"2026-09-04","line":"22MB of unused WASM out of the download, and the owner can give the owner role a colour."},{"version":"1.9.14","date":"2026-09-04","line":"An invite code can carry a role, so somebody arrives already holding it."},{"version":"1.9.12","date":"2026-09-03","line":"Packaging only. Nothing changed in the app."},{"version":"1.9.11","date":"2026-09-03","line":"A voice room you cannot enter looks like one, and the reports list stops spinning when the answer is never coming."},{"version":"1.9.10","date":"2026-09-03","line":"Mentions are kept on the server, so they follow you between devices. A member can hold more than one role."},{"version":"1.9.9","date":"2026-09-03","line":"A channel badges you when you are named in it, and roles are ordered by dragging rather than by typing a number."},{"version":"1.9.8","date":"2026-09-02","line":"The owl you designed on one server can be the one you have on all of them.","note":true},{"version":"1.9.7","date":"2026-09-02","line":"An avatar copied from one server to another is re-encoded rather than passed along as it was."},{"version":"1.9.6","date":"2026-09-02","line":"One server's owl can be your owl everywhere, and the Windows tiles, signing check and updater work."},{"version":"1.9.5","date":"2026-09-02","line":"The member list groups by role and colours names by it. The Windows binaries are signed."},{"version":"1.9.2","date":"2026-09-02","line":"You can report a person from the member list, not only a message."},{"version":"1.9.1","date":"2026-09-02","line":"You can block somebody, and a voice token that does not grant speak is refused the microphone rather than muted after the fact."},{"version":"1.9.0","date":"2026-09-01","line":"Your messages can follow you to a second device, and denying a permission on a channel finally does something.","note":true},{"version":"1.7.3","date":"2026-08-31","line":"A channel you cannot see stops lighting up, and the direct-message key warning stops crying wolf."},{"version":"1.7.2","date":"2026-08-31","line":"Direct messages and their attachments are encrypted before they leave, so a server stores what it cannot read."},{"version":"1.6.52","date":"2026-08-29","line":"Voice stops announcing a failure it is still recovering from, and Gryt behind a proxy works again.","note":true},{"version":"1.6.51","date":"2026-08-27","line":"The update you were told about downloads itself, and voice comes back properly after a reconnect."},{"version":"1.6.43","date":"2026-08-26","line":"Push to talk works again, and a screen share sends only the audio you meant to send.","note":true},{"version":"1.6.42","date":"2026-08-25","line":"A voice tile takes its colour from the owl on it rather than from a picture of one."},{"version":"1.6.41","date":"2026-08-25","line":"Gryt learns a server's scheme once instead of guessing it every time."},{"version":"1.6.40","date":"2026-08-25","line":"The UI scale reaches dialogs, menus and tooltips, which it had been leaving behind."},{"version":"1.6.39","date":"2026-08-25","line":"The new Gryt mark, and an owl you can save to a file."},{"version":"1.6.38","date":"2026-08-25","line":"The owl somebody designed is drawn as itself rather than as a picture of one."},{"version":"1.6.37","date":"2026-08-25","line":"You choose what kind of avatar you want, and design the owl when that is the one."},{"version":"1.6.36","date":"2026-08-24","line":"People are drawn as owls, and the renderer stops throttling itself while a call is running."},{"version":"1.6.34","date":"2026-08-23","line":"A screen share can send audio from the applications you pick, and a hotkey can be a mouse button."},{"version":"1.6.33","date":"2026-08-23","line":"A wrong clock on your machine stops making a server unjoinable, and says that is what happened."},{"version":"1.6.32","date":"2026-08-23","line":"The confirmation after sending a report waits to be dismissed instead of vanishing."},{"version":"1.6.31","date":"2026-08-22","line":"A report sends your log only when you ask it to, and shows you what it is sending."},{"version":"1.6.30","date":"2026-08-22","line":"The report form matches the one on the phone."},{"version":"1.6.29","date":"2026-08-22","line":"Give feedback and Report a bug open the form. They had been doing nothing."},{"version":"1.6.28","date":"2026-08-22","line":"A session that has expired says so instead of loading forever."},{"version":"1.6.27","date":"2026-08-22","line":"A video tile that failed says so instead of connecting forever."},{"version":"1.6.26","date":"2026-08-22","line":"Clicking a stream focuses it without taking over the app, and the camera preview shows the resolution actually being sent."},{"version":"1.6.25","date":"2026-08-21","line":"A Doctor that places a real call and tells you which hop is broken."},{"version":"1.6.24","date":"2026-08-21","line":"Packaging only. Nothing changed in the app."},{"version":"1.6.23","date":"2026-08-21","line":"A Bots tab, a BOT tag nobody can fake, and a switch for whether bots may knock."},{"version":"1.6.22","date":"2026-08-21","line":"Roles and permissions, with an editor. Voice moved to one UDP port for media instead of a range."},{"version":"1.6.19","date":"2026-08-18","line":"Channel rows have room to scale into."},{"version":"1.6.18","date":"2026-08-17","line":"Popups draw above dialogs, and the camera stops on every way out of a call."},{"version":"1.6.17","date":"2026-08-17","line":"A server you have asked to join is kept while you wait for the answer."},{"version":"1.6.14","date":"2026-08-16","line":"The uninstaller 1.5.10 shipped broken is fixed."},{"version":"1.6.10","date":"2026-08-15","line":"The themed titlebar and identity settings work again."},{"version":"1.6.9","date":"2026-08-14","line":"The empty channel state is redrawn, and older desktop updaters can cross to the new one."},{"version":"1.6.7","date":"2026-08-14","line":"The desktop update handoff does the same thing every time."},{"version":"1.6.5","date":"2026-08-14","line":"Gryt says which clock is wrong and links to how to fix it, and stops guessing https from the shape of an address."},{"version":"1.5.10","date":"2026-08-13","line":"Gryt can wear a theme you paste in, and leaving a server actually forgets it.","note":true},{"version":"1.5.8","date":"2026-08-13","line":"Fixes for what a right-click, a look and a message turned up."},{"version":"1.5.7","date":"2026-08-13","line":"Import a theme from a link, and the library's own presets are offered as built-in ones."},{"version":"1.5.6","date":"2026-08-13","line":"Leaving a server forgets it."},{"version":"1.5.5","date":"2026-08-13","line":"More than one server from inside the app, a reworked way of adding one, and discovery with a home of its own."},{"version":"1.3.1","date":"2026-08-05","line":"The volume sliders stop lying about what they do, and the noise gate keeps working when you look away.","note":true},{"version":"1.2.12","date":"2026-05-28","line":"The app can run a server itself, and reaches it on your own machine."},{"version":"1.1.24","date":"2026-03-10","line":"Screen sharing connects, and hardware screen capture works."},{"version":"1.1.20","date":"2026-03-09","line":"Camera settings gain a frame rate and a codec to pick."},{"version":"1.1.17","date":"2026-03-09","line":"Nothing you can see. An import order fix."},{"version":"1.1.16","date":"2026-03-09","line":"Gryt finds servers running on your own network."},{"version":"1.1.15","date":"2026-03-09","line":"A server says when there is an update to take."},{"version":"1.1.14","date":"2026-03-09","line":"Addons can be managed, and the tray icon shows up on macOS."},{"version":"1.1.12","date":"2026-03-08","line":"The microphone and camera work on macOS, and server settings are checked before they save."},{"version":"1.1.11","date":"2026-03-08","line":"You can cancel a sign-in part way through, and the noise gate has a release control."},{"version":"1.1.9","date":"2026-03-05","line":"The sign-in button stops taking a second press while it is already working."},{"version":"1.1.8","date":"2026-03-03","line":"Native screen capture, and webhooks in a server's settings."},{"version":"1.1.7","date":"2026-03-03","line":"A stream cleans itself up when the call ends."},{"version":"1.1.5","date":"2026-03-03","line":"A Support tab in settings, and the typing indicator stops getting stuck."},{"version":"1.1.4","date":"2026-03-02","line":"Voice recovers on its own, and always-on-top knows which window it means."},{"version":"1.1.1","date":"2026-03-02","line":"Screen sharing stops leaving a track behind when it ends."},{"version":"1.1.0","date":"2026-03-02","line":"Audio capture reports what it is doing, and the splash screen behaves in development."},{"version":"1.0.138","date":"2026-03-01","line":"The loopback test in audio settings works, and the sidebar responds properly."},{"version":"1.0.137","date":"2026-03-01","line":"The oldest release still published. There is no earlier tag to compare it against, so this is what it is rather than what it changed."}],"server":[{"version":"1.12.0-beta.2","date":"2026-10-15","line":"Beta: a group says who added whom.","changes":[{"kind":"new","area":"chat","text":"Adding someone to a group posts a line everyone in it can see, naming who added whom."}],"channel":"beta"},{"version":"1.12.0-beta.1","date":"2026-10-14","line":"Beta: channel messages and file names can be searched.","changes":[{"kind":"new","area":"chat","text":"The server can search the messages in every text channel you can read, with or without accents, so skal finds skål. Direct messages and voice-channel text aren't searched."},{"kind":"new","area":"chat","text":"It also searches file names, and narrows results by who sent them, the channel, the date, or whether they have a picture, a link or a file."},{"kind":"changed","area":"self-hosting","text":"The first start after updating builds a search index over every message once, so a big server takes a little longer to come up that one time."}],"channel":"beta"},{"version":"1.11.2","date":"2026-10-14","line":"The last S3 leftovers are gone from how the server stores uploads.","changes":[{"kind":"changed","area":"self-hosting","text":"Uploads, emoji and the server icon all use one folder under DATA_DIR, called gryt unless S3_BUCKET names it. A server that came over from S3 keeps its old bucket's name as the folder, so nothing moves."}]},{"version":"1.11.2-beta.1","date":"2026-10-14","line":"Beta: the last S3 leftovers are gone from how the server stores uploads.","changes":[{"kind":"changed","area":"self-hosting","text":"Uploads, emoji and the server icon all use one folder under DATA_DIR, called gryt unless S3_BUCKET names it. A server that came over from S3 keeps its old bucket's name as the folder, so nothing moves."}],"channel":"beta"},{"version":"1.11.1","date":"2026-10-13","line":"Older apps now show a poll's question and a line asking to update Gryt.","changes":[{"kind":"fixed","area":"chat","text":"On a desktop app from 1.11.19 to 1.13.26, or a phone build from before polls, a poll showed up as an empty message. Those apps now get the question and a line saying to update Gryt to see it and vote, and that includes polls that are already saved."}]},{"version":"1.11.0","date":"2026-10-13","line":"Polls, and uploads kept on the server's own disk with no S3 or MinIO left.","changes":[{"kind":"new","area":"chat","text":"Polls in channels: a question with up to ten options, one answer or several, anonymous or not, an end time, and optionally only some roles allowed to answer. Totals update live, and you can change or take back your vote."},{"kind":"changed","area":"self-hosting","text":"Uploads are stored on disk under DATA_DIR and nowhere else. A server still set up for S3 or MinIO copies its bucket over on its first start, checks every file, and leaves the bucket as it was. If the copy fails, it doesn't start."},{"kind":"fixed","area":"self-hosting","text":"A server with no storage settings at all takes uploads on disk instead of refusing them, and a failed upload says what to tell whoever runs the server."}]},{"version":"1.11.0-beta.1","date":"2026-10-13","line":"Beta: polls, and uploads stored on the server's own disk with no S3 or MinIO left.","changes":[{"kind":"new","area":"chat","text":"Polls in channels: a question with up to ten options, one answer or several, anonymous or not, an end time, and optionally only some roles allowed to answer. Totals update live, and you can change or take back your vote."},{"kind":"changed","area":"self-hosting","text":"Uploads are stored on disk under DATA_DIR and nowhere else. A server that was still set up for S3 or MinIO copies its bucket over on its first start, checks every file, and leaves the bucket as it was. If the copy fails, it doesn't start."},{"kind":"fixed","area":"self-hosting","text":"A server with no storage settings at all takes uploads on disk instead of refusing them, and a failed upload says what to tell whoever runs the server."}],"channel":"beta"},{"version":"1.10.59","date":"2026-10-13","line":"A bot's messages show the BOT tag as soon as they arrive, not only after a reload.","changes":[{"kind":"fixed","area":"chat","text":"A bot's new messages, edits and forum posts arrived without the BOT tag next to its name. The tag only showed after a reload."}]},{"version":"1.10.58","date":"2026-10-08","line":"Servers can wake phones, following each person's notification settings, and the notification shows who wrote and the first line without the push service seeing it.","changes":[{"kind":"new","area":"notifications","text":"If you turned on notifications for a server in the phone app, it wakes your phone the way the desktop would notify you: every message in channels at All messages, mentions in channels at Only mentions, and direct messages. @everyone and @here count unless you suppressed them. Nothing comes while you're active at a screen."},{"kind":"new","area":"notifications","text":"On iPhone, the notification shows who wrote, where, and the first line. The server locks that text with a key only your phone has, so the push service, Apple and Google can't read it. Encrypted direct messages still say New direct message, because the server can't read those either."},{"kind":"new","area":"self-hosting","text":"Pushes go through push.gryt.chat, which sees a random ID per phone and the locked preview, never who sent it or what it says. Set GRYT_PUSH_RELAY_URL=off to turn pushes off."}],"post":"seven-weeks-of-gryt-on-a-phone","image":"https://gryt.chat/blog/thumb-mobile.webp"},{"version":"1.10.58-beta.2","date":"2026-10-07","line":"Beta: phone notifications follow your notification settings, so a channel set to All messages wakes your phone for every message.","changes":[{"kind":"changed","area":"notifications","text":"A channel you have at All messages on the phone now wakes it for every message, as the desktop notifies. @everyone and @here wake it too, unless you suppress them for that server. Channels at Only mentions still wake it for mentions only."}],"channel":"beta"},{"version":"1.10.58-beta.1","date":"2026-10-07","line":"Servers can wake phones for mentions and direct messages.","changes":[{"kind":"new","area":"notifications","text":"If you turned notifications on for a server in the phone app, it can wake your phone when someone mentions you or sends you a direct message, unless you're at a screen. Channels you muted on the phone are skipped."},{"kind":"new","area":"self-hosting","text":"Pushes go through push.gryt.chat, which gets a random ID and the word mention or dm, never who sent it or what it says. Set GRYT_PUSH_RELAY_URL=off to turn them off."}],"channel":"beta"},{"version":"1.10.57","date":"2026-10-07","line":"The apps can open a conversation's history at any message, so an old pin or reply opens right where it is.","changes":[{"kind":"new","area":"chat","text":"History can be fetched around a message and paged towards the present, so clicking an old pin or reply opens right there instead of loading everything in between."}]},{"version":"1.10.56","date":"2026-10-06","line":"Messages can be pinned, and owners can let members use custom emoji from their other servers.","changes":[{"kind":"new","area":"chat","text":"Pin messages in a channel, or in a DM. In a channel you need Manage messages. In a DM either of you can. The app lists a conversation's pins from a button in its header."},{"kind":"new","area":"servers","text":"A server setting, off by default, that lets messages here show custom emoji from members' other Gryt servers. Those load from the other server, which sees who read them."}]},{"version":"1.10.56-beta.1","date":"2026-10-05","line":"Beta: owners can let members use custom emoji from their other servers.","changes":[{"kind":"new","area":"servers","text":"A server setting, off by default, that lets messages here show custom emoji from members' other Gryt servers. Those load from the other server, which sees who read them."}],"channel":"beta"},{"version":"1.10.55","date":"2026-10-05","line":"Cards keep the short banner choice.","changes":[{"kind":"new","area":"settings","text":"A card set to a short banner in app 1.13.12 stays that way when it's saved."}]},{"version":"1.10.54","date":"2026-10-05","line":"Emoji, server and group icons, and pictures sent by webhooks are checked by the image worker too, so the server never decodes an upload itself.","changes":[{"kind":"security","area":"self-hosting","text":"Emoji, server icons, group pictures, webhook avatars and pictures webhooks link to now go through the image worker's locked-down process, like every other upload. Link previews read a picture's size from its first bytes instead of opening it. Servers without the image worker work as before. Needs image worker 1.4.1."}]},{"version":"1.10.53","date":"2026-10-05","line":"Every picture and video sent in chat is checked and written out again before anyone sees it.","changes":[{"kind":"security","area":"chat","text":"Chat videos now go through the image worker like pictures do, and come out as a fresh file with their sound kept. A picture or video sent with the wrong file type is recognised by its contents and checked too. Other files are still downloads, as before. Needs image worker 1.4.0."}]},{"version":"1.10.52","date":"2026-10-05","line":"A new avatar or banner only replaces your old one once it has been checked, so a file that fails the check no longer leaves you with a broken picture.","changes":[{"kind":"fixed","area":"servers","text":"If an uploaded avatar or banner couldn't be processed, it still became yours and showed as broken, and the old one was gone. Now you keep the old one until the new one is ready, and a file that fails is thrown away."},{"kind":"new","area":"servers","text":"When an avatar or banner can't be processed, the person who uploaded it is told, with app 1.13.10 or later."},{"kind":"new","area":"self-hosting","text":"Server settings say whether uploads are checked in a sandbox on this server, and have a switch for video avatars and banners. It's on by default, and greyed out with the reason where the server can't convert video."}]},{"version":"1.10.51","date":"2026-10-05","line":"The server half of video banners and avatars. Nothing changes until a new image worker is out.","changes":[{"kind":"changed","area":"self-hosting","text":"Once the image worker supports it, new avatars, banners and chat images are held back until the worker has redrawn them, and only the redrawn copy is ever served. The image worker you're running now doesn't, so uploads work as before."},{"kind":"new","area":"servers","text":"Once the image worker can convert video, members can use a short video as their banner or avatar. The worker turns it into a silent clip of up to ten seconds, at a fixed size, before anyone sees it."}]},{"version":"1.10.50","date":"2026-10-05","line":"A card's banner is stored in the card's own shape, so it looks the same after saving as it did in the editor.","changes":[{"kind":"fixed","area":"servers","text":"Banners were stored wider than the card shows them, so the card cropped and enlarged them a second time. New banners are stored at 960 by 492, the card's own shape. Banners already uploaded change when they're uploaded again."}]},{"version":"1.10.49","date":"2026-10-02","line":"Member cards can remember a chosen Unicode or server emoji as their pattern.","changes":[{"kind":"new","area":"servers","text":"Card styles keep the selected emoji while filtering invalid or oversized identifiers."}]},{"version":"1.10.48","date":"2026-09-30","line":"Roles can allow member-card banner uploads separately from avatar-image uploads.","changes":[{"kind":"new","area":"servers","text":"Banner uploads have their own role permission. Existing roles keep the access they had until an admin changes it."}]},{"version":"1.10.47","date":"2026-09-30","line":"The banner on a member card can have no fade.","changes":[{"kind":"new","area":"servers","text":"A card style can ask for no fade between the banner and the card. Older apps draw the usual fade."}]},{"version":"1.10.46","date":"2026-09-30","line":"A member can keep the plain card as a choice, now that apps draw a generated card for anyone without one.","changes":[{"kind":"new","area":"servers","text":"The plain card can be stored as a choice. With no style at all, newer apps draw a card worked out from the member's name."}]},{"version":"1.10.45","date":"2026-09-30","line":"Member cards can carry a line weight, an outline and a pattern over the banner, and the server no longer fetches game art.","changes":[{"kind":"new","area":"servers","text":"A card style can set a line pattern's weight, the card's outline, and whether the pattern sits in front of a banner picture. Older apps draw the card as before."},{"kind":"changed","area":"servers","text":"The server no longer fetches or serves game art. The app stopped drawing it, and the art an earlier version cached is cleared on start."}]},{"version":"1.10.44","date":"2026-09-30","line":"Member cards can show the game's art behind the band, and a card can say \"Using\" for an app like Figma.","changes":[{"kind":"new","area":"servers","text":"The server fetches a game's art from Steam once, keeps it on disk and serves it for member cards, so nobody's app loads it from Steam directly."},{"kind":"new","area":"servers","text":"Cached art is checked for a newer picture once a day, and people who manage the server can see how much is cached and clear it."},{"kind":"new","area":"servers","text":"Rich Presence cards can be of the \"using\" kind, for apps rather than games. Older apps show them as playing."}]},{"version":"1.10.44-beta.4","date":"2026-09-30","line":"Beta: game art is checked for a newer picture once a day, and server owners can clear it.","changes":[{"kind":"changed","area":"servers","text":"Cached game art is checked against Steam once a day and replaced when there's a newer picture. A check with no change downloads nothing."},{"kind":"new","area":"servers","text":"People who manage the server can see how much game art is cached and clear it."}],"channel":"beta"},{"version":"1.10.44-beta.3","date":"2026-09-30","line":"Beta: game art comes from Steam only.","changes":[{"kind":"changed","area":"servers","text":"Game art for member cards comes from Steam only. Gryt servers don't contact Discord, so a game with no Steam page has no art."}],"channel":"beta"},{"version":"1.10.44-beta.2","date":"2026-09-29","line":"Beta: the server fetches each game's art once and serves it for member cards.","changes":[{"kind":"new","area":"servers","text":"Game art for member cards comes from the server, fetched once from Steam or Discord and kept on disk, so members' viewers never load it from either."}],"channel":"beta"},{"version":"1.10.44-beta.1","date":"2026-09-29","line":"Beta: a card can say \"Using Figma\" for an app, rather than \"Playing\".","changes":[{"kind":"new","area":"servers","text":"Rich Presence cards can be of the \"using\" kind, for apps like Figma or VS Code that Gryt spots running. Older apps show them as playing."}],"channel":"beta"},{"version":"1.10.43","date":"2026-09-29","line":"A server owner can import a Discord server's history from a DiscordChatExporter export.","changes":[{"kind":"new","area":"servers","text":"The owner can import a DiscordChatExporter export: channels, threads, forum posts, replies, reactions, emoji and files, with the original dates and who wrote each message on Discord."},{"kind":"new","area":"servers","text":"Running the same export again adds nothing, and an import cut off by a restart starts over."}]},{"version":"1.10.42","date":"2026-09-29","line":"Members can style their card and add a bio, pronouns, a status line and, if they're allowed to upload, a banner.","changes":[{"kind":"new","area":"servers","text":"Members can add a card style, a bio, pronouns and a status line, checked the same way as the rest of their profile."},{"kind":"new","area":"servers","text":"A member who may upload can add a banner to their card."}]},{"version":"1.10.41","date":"2026-09-29","line":"A Rich Presence card can now carry the game's Discord application id, so other members can show its icon.","changes":[{"kind":"new","area":"servers","text":"Rich Presence activities accept an optional application id, checked the same way as the rest of the card, so an app that sends one can show a game icon on other members' cards."}]},{"version":"1.10.40","date":"2026-09-29","line":"The server can carry what game someone is playing in more detail: what they're doing, a timer and party size, for apps that send it.","changes":[{"kind":"new","area":"servers","text":"A member's activity can now carry details, a state line, elapsed time, party size and up to two link buttons, with length limits and the same checks links in messages get. Older apps keep seeing the plain status line."}]},{"version":"1.10.39","date":"2026-09-29","line":"Links to pictures and files no longer carry a long-lived key, and it ships SFU 1.0.75, which fixes a screen share that could freeze for good after your upload slowed down. Update if you run a server.","changes":[{"kind":"security","area":"servers","text":"Every link to a picture or file used to carry a token that could open any upload you can see, DMs included, for 12 hours. Links are now signed for one file and last a few minutes, and the key to sign them only reaches an app after the server has proved who it is. Older apps keep working."}]},{"version":"1.10.38","date":"2026-09-28","line":"Removing one of your devices from encrypted DMs now sticks, encrypted messages can be reported, and the health check notices a database it can't write. It also ships SFU 1.0.74.","changes":[{"kind":"security","area":"servers","text":"A device you remove from encrypted DMs stays removed. Before, a removed device that was still signed in registered again the next time it connected and got added back to your DMs. Now the server refuses it for good, and the app on that device wipes its encrypted messages for this server."},{"kind":"new","area":"servers","text":"People can report a message from an end-to-end encrypted DM. The server can't read it, so the report carries the reporter's copy, marked unverified for moderators."},{"kind":"fixed","area":"self-hosting","text":"/health said healthy when the server couldn't write its database. It now answers 503, so Docker and the gryt CLI see the problem."}]},{"version":"1.10.37","date":"2026-09-28","line":"Files in end-to-end encrypted DMs are kept like any other attachment, and the server no longer sends more at once than a connection can take.","changes":[{"kind":"new","area":"chat","text":"Files sent in an end-to-end encrypted DM stay on the server as long as the message does. The server only learns which uploads a message holds, and the files themselves stay encrypted."},{"kind":"fixed","area":"servers","text":"A device with lots of waiting encrypted-DM updates no longer gets disconnected when it catches up. The server sends them in smaller batches."}]},{"version":"1.10.36","date":"2026-09-28","line":"More groundwork for end-to-end encrypted DMs. The server now checks the keys devices upload and lets people publish the key that ties their devices together. When someone sends an encrypted DM, people on older apps see a line asking them to update instead of nothing.","changes":[{"kind":"new","area":"servers","text":"Members can publish the key that vouches for all their devices, and it shows up in the member list so other people's apps can check it."},{"kind":"new","area":"chat","text":"When a DM goes end-to-end encrypted, people on an app from before that see \"sent an end-to-end encrypted message. Update Gryt to read it.\" in place of each message."},{"kind":"security","area":"servers","text":"The server refuses device keys that aren't signed properly or that don't match the device uploading them. Keys last 30 days, and expired ones are never handed out."}]},{"version":"1.10.35","date":"2026-09-28","line":"Groundwork for end-to-end encrypted DMs: the server can now store and pass along MLS messages between people's devices. Nothing uses it until an app update turns it on, so there's no rush to update.","changes":[{"kind":"new","area":"servers","text":"The server can hold each device's MLS key packages and pass encrypted group changes and messages between the devices in a DM. It can't read any of it. It only checks that people added to a DM are really in it and that blocks still apply."}]},{"version":"1.10.34","date":"2026-09-25","line":"Friends: members can send, accept and remove friend requests on your server, and \"calls from friends\" now means real friends. It also ships SFU 1.0.73, which applies permission changes to calls already in progress, and image worker 1.2.9, which runs the video decoder locked away. Update if you run a server.","changes":[{"kind":"new","area":"servers","text":"Members can send friend requests to each other, accept or decline them, and remove friends. Friends are per server, and your full list lives only on your devices; the server keeps only the pairs between its own members, so it can enforce \"calls from friends\". Requests are rate-limited and blocked people can't send them. Until someone adds their first friend on a server, people they've written to still count as friends for calls."},{"kind":"changed","area":"voice","text":"Taking away camera, screen sharing or speaking in a channel now stops those streams on the SFU itself for people already in the call, not only in their app."},{"kind":"security","area":"self-hosting","text":"The image worker's video decoder runs as its own user with no network, no environment and no access to the rest of the worker. If your compose file sets a user: for the image worker, remove it, or videos won't get posters."}]},{"version":"1.10.33","date":"2026-09-25","line":"Blocking someone ends your one-to-one call with them, and a channel permission taken away mid-call now takes effect straight away. It also ships SFU 1.0.72. Update if you run a server.","changes":[{"kind":"security","area":"voice","text":"Blocking someone during a one-to-one call ends it for both of you and cancels any ring between you. In a group call, the SFU stops sending you their audio and video."},{"kind":"changed","area":"voice","text":"Taking away camera, screen sharing or speaking in a channel now applies to people already in its call: their camera or share turns off, or they're muted. Before, it only applied once they rejoined. The SFU side of this comes in a later SFU release; until then the server and the app do it on their own."}]},{"version":"1.10.32","date":"2026-09-25","line":"Members can choose who may message them and who may call them, and the server enforces it. Update before the app, so the new settings take effect.","changes":[{"kind":"new","area":"chat","text":"Each member has a Who can send me messages setting and a Who can call me setting, as a default with an optional override per server. The server refuses DMs, group adds, rings and call joins that the setting doesn't allow, and nobody gets past it, owners and moderators included. A stricter setting also applies to conversations that are already open."},{"kind":"changed","area":"voice","text":"By default only people you've written to in a one-to-one can ring you. Until friends exist, that's what \"friends\" means in the call setting."}]},{"version":"1.10.31","date":"2026-09-25","line":"A spam filter now times out members who flood channels or DMs, on its own, and blocking someone now covers calls and typing too. The filter is on by default at normal sensitivity. Update if you run a server.","changes":[{"kind":"new","area":"servers","text":"The spam filter scores repeated messages, the same text in several channels, bursts of links, invites and mentions, walls of one character, and new members messaging many people at once. DMs are judged only on how many people and conversations are involved, never on what they say. A member who trips it is timed out for 1 minute, then 10 minutes, an hour and a day for repeats in the same week. The owner, moderators and bots are never scored. It can be switched off or made more or less sensitive in server settings."},{"kind":"security","area":"voice","text":"Blocking someone didn't stop them ringing you, joining a one-to-one call with you, or showing you their typing indicator. The server refuses all three now."},{"kind":"fixed","area":"voice","text":"When a timeout ran out, voice stayed muted until the member reconnected. It lifts straight away now, for moderator timeouts too."}]},{"version":"1.10.30","date":"2026-09-24","line":"A message sent again after a restart no longer posts twice, and history loads in full straight after a restart. Update before the app, so resends after a restart are safe.","changes":[{"kind":"fixed","area":"chat","text":"The server forgot which messages it had already received whenever it restarted, so a resend could post a second copy. A message's id now comes from its sender, conversation and send id, so a resend can never write it twice."},{"kind":"fixed","area":"chat","text":"Right after a restart, opening a conversation could show history starting from the first message sent since the restart. It loads in full now."}]},{"version":"1.10.29","date":"2026-09-24","line":"@everyone, @here, role and #channel mentions, with a new Mention everyone permission that owners and admins get by default. Update before the app so the new pings work.","changes":[{"kind":"new","area":"servers","text":"A new Mention everyone permission decides who can ping @everyone, @here and roles. It can be set per channel, and each role has an Anyone can mention this role switch. The server checks it, so a mention from someone without it is stored as plain text and pings nobody."},{"kind":"new","area":"chat","text":"#channel links only ever carry the channel id, so a member who can't see a channel never receives its name."}]},{"version":"1.10.28","date":"2026-09-24","line":"A storage error partway through a download no longer crashes the server, filesystem storage works without a bucket name, and video poster frames come from the image worker instead of an unchecked ffmpeg call. Update the server and the image worker together.","changes":[{"kind":"security","area":"self-hosting","text":"The server no longer runs ffmpeg itself to make video poster frames. Image worker 1.2.8 makes them in its sandbox, so a server without an up-to-date worker simply shows videos without a poster."},{"kind":"fixed","area":"self-hosting","text":"A server using filesystem storage with no S3_BUCKET set failed every upload. It uses a folder called gryt now."},{"kind":"fixed","area":"self-hosting","text":"If storage failed in the middle of sending a file, emoji or server icon, the error had nowhere to go and took the server process down with it. Only that download is cut short now, and the error is logged."}]},{"version":"1.10.27","date":"2026-09-24","line":"Someone whose membership moves to another identity, or who signs in as someone else on the same connection, now leaves the voice call. Before, they stayed in it and could still be heard. It also ships SFU 1.0.71. Update if you run a server.","changes":[{"kind":"security","area":"voice","text":"Replacing or merging a member's identity took away their access but left their connection in the voice call, where they could still be heard. They're taken out of the call now."},{"kind":"changed","area":"voice","text":"Ships SFU 1.0.71, which stops sending video to viewers who can't see it and tells the sender, so newer apps can send less."}]},{"version":"1.10.26","date":"2026-09-24","line":"Members now get what they may do in each channel, so the app can hide what a channel doesn't allow. And a channel that allows sending messages or joining voice now lets in a role that can't do that elsewhere on the server, which it didn't before. Update if you run a server.","changes":[{"kind":"fixed","area":"servers","text":"Allowing Send messages or Join voice on a channel did nothing for a role that didn't have it server-wide, because the server-wide check came first. The channel's rule decides now."},{"kind":"changed","area":"servers","text":"Each channel in the server's details now lists what the member may do there, which app 1.11.41 uses to hide the rest. Older apps ignore it."}]},{"version":"1.10.25","date":"2026-09-24","line":"The server now tells the SFU whether each member may share a camera or screen in the room they join, so SFU 1.0.70 can refuse video a channel doesn't allow. Update both if you run a server.","changes":[{"kind":"security","area":"voice","text":"A channel's camera and screen sharing permissions are now enforced by the SFU too. Before, a modified app could skip the server's check and send video anyway."}]},{"version":"1.10.24","date":"2026-09-24","line":"Rules you set on a channel now also cover attachments, reactions, editing and deleting messages, reports, and camera and screen sharing, so some that did nothing before take effect now. Update if you run a server.","changes":[{"kind":"changed","area":"voice","text":"A channel's camera and screen sharing permissions are now checked against the room itself, not just the whole server. Switching into a room that denies one turns it off without an error, so an open camera or share just stops reaching anyone there."},{"kind":"changed","area":"chat","text":"A channel's permission rules now cover attachments, reactions, editing and deleting your own messages, managing other people's messages, and reports, not only reading and sending. Rules an owner set in a channel months ago that did nothing back then can take effect for the first time now, including for moderators, and an allow can open something a role lacks everywhere else."},{"kind":"fixed","area":"chat","text":"A refused message didn't say which one it was, so a burst of refusals settled the wrong rows in the client's retry queue and left the rest stuck pending until a reload. A refusal now carries which send it was about."},{"kind":"new","area":"chat","text":"Uploaded videos now get a stored width and height, the same as images already did. Chat can show a video's real shape before it loads instead of guessing 16:9."}]},{"version":"1.10.23","date":"2026-09-24","line":"Switching between two voice channels on the same server moves you properly now. The channel you left sees you go, and the new one hears you.","changes":[{"kind":"fixed","text":"Switching from one voice channel to another on the same server left your socket in the old channel's room. The old channel kept hearing you and the new one didn't, even though the member list showed you in the right place. You're moved into the right room now."}]},{"version":"1.10.22","date":"2026-09-23","line":"A forum topic arrives with its tags again. Before, a new one turned up without them until something else refreshed the list.","changes":[{"kind":"fixed","text":"A thread created inside a forum arrived without its tags. thread:create and forum:topic:create each built the thread:created object by hand, and both were missing the tags field. Both call the shared builder now."}]},{"version":"1.10.21","date":"2026-09-23","line":"A self-hosted bundle binds to your whole network by default instead of only to itself, so people can actually reach it. A replaced member's old connection is cut off straight away, the server's version stays hidden until somebody joins, and the app can show a channel's reply counts without opening every thread. Update if you run a server.","changes":[{"kind":"new","text":"A channel's history now carries its threads' reply counts, so the app can show them without opening each thread. An app on an older server keeps the old behaviour until the server updates."},{"kind":"changed","text":"The server no longer stores which conversations somebody has hidden. Hiding is a per-device thing in the app now, and the stored rows are cleared when this release starts."},{"kind":"fixed","text":"A self-hosted bundle's server bound to localhost only, so nothing else on your network could reach it. It binds to every interface by default now."},{"kind":"fixed","text":"The Add a server preview counted everyone who had ever joined a server, including people who left. It counts active members only now."},{"kind":"fixed","text":"Blocking a guest, then having them sign into an account, used to lose the block — it stayed on the guest's temporary id instead of following them to the account. Blocks carry over either way now."},{"kind":"security","text":"Replacing a member's identity left their old connection acting as them until it reconnected on its own. That connection is cut immediately now."},{"kind":"changed","text":"How often someone can change their status is rate limited now, so a script can't make the server broadcast the member list to everyone over and over."},{"kind":"fixed","text":"A file loaded without an Origin header, such as an image or video tag, could get cached by the browser with no `Vary: Origin`. A later request for the same file could then get wrongly refused off that cached response. Every response carries `Vary: Origin` now, not just the ones that had one."},{"kind":"security","text":"Anyone connecting to a server's socket could read its version before joining, and a version number is enough to go looking for known holes. The version stays hidden until you've actually joined."}]},{"version":"1.10.20","date":"2026-09-22","line":"When the server stops or restarts, it closes every connection properly first, so the apps know it's a restart. The log also says which app each connection came from.","changes":[{"kind":"changed","text":"Stopping the server closes every connection before it exits, taking up to 3 seconds. Apps reconnect on their own like before, and the log shows each one leaving with \"server shutting down\". Before, it logged nothing."},{"kind":"changed","text":"The server log's connect and disconnect lines say which app it was: desktop, web, iOS, Android or other. It's worked out from the app's user agent, which itself isn't logged."}]},{"version":"1.10.19","date":"2026-09-21","line":"The server now checks a channel's Join voice permission before letting anyone into its call, where only the app did before. Members also stop getting the names of folders they can't see into, and folders can have permissions of their own. Update if you run a server.","changes":[{"kind":"security","text":"The server refuses a voice join when the channel's permissions take away Join voice. Before, only the app checked. Somebody who could see the channel could still join it by sending the request themselves, and hear everyone in it."},{"kind":"security","text":"The server only sends a folder, name and all, to people who can see a channel in it. Before, every member got every folder's name. Any member who asked for the sidebar's rows also got all of them, hidden channels' ids included."},{"kind":"new","text":"Folders can have permissions, with the same choices as a channel: Everyone, a template, or rules of their own. A channel in a folder follows it until somebody gives it its own. If it's dragged out to the top level, or the folder is deleted, it keeps the folder's permissions. Moving a channel into a folder with different permissions also needs Manage channels, since that changes who can see it."},{"kind":"new","text":"Starting a group, or adding somebody to one, needs the new Create groups permission. Every role that can send direct messages gets it when the server updates, so nobody loses anything."},{"kind":"changed","text":"Apps can see that a server has direct messages turned off before trying one, so New message leaves that server's people out."},{"kind":"fixed","text":"Somebody you'd blocked could still put you in a group. The server refuses that now, as it already did for a direct message."}]},{"version":"1.10.18","date":"2026-09-21","line":"Behind a trusted proxy, the webhook URLs the server hands out start https://, so their tokens aren't sent unencrypted. People whose connection blips mid-call stay in the channel while they reconnect, and Automated channels default to Nothing.","changes":[{"kind":"security","text":"Behind a proxy or tunnel, the webhook URL the server hands out started http://, so a service posting to it sent the webhook's token unencrypted. With GRYT_TRUSTED_PROXY_HOPS set, the URL starts https:// now."},{"kind":"new","text":"Each channel has a default notification level that members get until they pick their own. Automated channels default to Nothing, existing ones included, and admins can change it. An app too old to know about it carries on as before."},{"kind":"fixed","text":"Somebody whose connection blipped mid-call could be taken out of the channel while their app was still reconnecting. The server waits for them now."},{"kind":"fixed","text":"Switching voice channels on the same server could hang you up once you'd been in the first one for ten seconds."},{"kind":"fixed","text":"When a server's voice seats were full, somebody already in voice couldn't switch channels or reconnect, because their own seat was counted against them."}]},{"version":"1.10.16","date":"2026-09-16","line":"The Windows and Linux server bundles keep their voice server's registration and metrics ports to the machine they run on, where anyone on the same network could reach them before.","changes":[{"kind":"security","text":"The self-hosted bundles set SFU_CONTROL_HOST and SFU_METRICS_HOST to 127.0.0.1, so other machines on your network can't register a server with your voice server or read its metrics. They also set METRICS_PORT=0, so the server's own metrics can't take that port instead. A config.env you copy over from an older bundle needs those three lines added."}]},{"version":"1.10.15","date":"2026-09-15","line":"Security release: channel messages only reach members who can read the channel, no member's sign-in token is sent to other members, and sign-in tokens issued before this version stop working once so clients sign in again by themselves. Update every server you run.","changes":[{"kind":"security","text":"New channel messages, edits and reactions only reach people who can read the channel. Before, a connection that had not joined the server got them too, and so did members without permission to see the channel."},{"kind":"security","text":"Members no longer receive each other's sign-in tokens with the list of who is connected. Before, any member could use one to act as another member who was online, the owner included."},{"kind":"changed","text":"Sign-in tokens issued before this version stop working the first time it starts, so a copied one is useless. Apps get a new token by themselves, and people may see one reconnect."},{"kind":"fixed","text":"Saying yes to moving a guest to your account works when your account is already a member of the server. It used to move nothing."}]},{"version":"1.10.14","date":"2026-09-15","line":"Link previews, image measuring and webhook pictures refuse every address inside the server's own network, however the address is written or wherever a redirect points, and webhook avatars are resized like member avatars. Update if you run a server.","changes":[{"kind":"security","text":"Link previews, image measuring and webhook pictures refuse every address inside the server's own network, however the address is written or wherever a redirect points. Before, some of those addresses got through."},{"kind":"fixed","text":"Webhook avatars are resized like member avatars. They used to be stored at full size."}]},{"version":"1.10.13","date":"2026-09-15","line":"Renaming an emoji, importing from BTTV and creating or editing a webhook accept request bodies up to 100 KB, the limit those routes always meant to have."},{"version":"1.10.12","date":"2026-09-15","line":"A request with broken JSON gets a 400 and one that is too big gets a 413, where both used to get a 500, and webhook messages are held to their 256 KB limit."},{"version":"1.10.11","date":"2026-09-15","line":"Webhooks can post up to 10 cards, with their pictures fetched once and stored on the server, and a webhook message keeps its name and avatar after a reload."},{"version":"1.10.10","date":"2026-09-15","line":"The media cleanup keeps webhook avatars. It used to delete them about half an hour after upload."},{"version":"1.10.9","date":"2026-09-15","line":"Group pictures get their own upload, so setting one no longer replaces the uploader's avatar, and the media cleanup keeps them."},{"version":"1.10.8","date":"2026-09-14","line":"A file posted in a private channel or a direct message can only be opened by people who can see that conversation. Before, any member with the file's link could open it.","changes":[{"kind":"security","text":"A file posted in a private channel or a direct message only opens for people who can see that conversation. Before, any member with the file's link could open it."}]},{"version":"1.10.7","date":"2026-09-14","line":"Asking for part of an uploaded file past its end gets the part that exists, so videos no longer fail to play when a browser asks for more than the file holds."},{"version":"1.10.6","date":"2026-09-14","line":"Renewing a sign-in token no longer makes the server check the member again and reload the whole member list, unless something about that member changed."},{"version":"1.10.5","date":"2026-09-14","line":"A client held back by a rate limit is told the real wait before it can try again. The self-hosted downloads report the SFU and image worker versions they contain."},{"version":"1.10.4","date":"2026-09-14","line":"MakerWorld links get a preview again, and a preview that failed is tried again after a few minutes instead of an hour. A client that hits a rate limit is told how long it really has to wait."},{"version":"1.10.3","date":"2026-09-14","line":"Opening a channel full of links no longer uses up your link preview limit, because previews the server already has do not count. A slow site no longer makes its preview fail outright. When a site stops answering, you get the last preview it gave."},{"version":"1.10.2","date":"2026-09-10","line":"Nothing changed that you would notice. It brings the image worker it ships with up to date."},{"version":"1.10.1","date":"2026-09-10","line":"Opening somebody's conversation no longer puts an empty one in their list. It waits until somebody writes in it."},{"version":"1.10.0","date":"2026-09-09","line":"The name you give a server when you create it saves properly now, and after an SFU upgrade the server works out where to register on its own instead of needing a config change."},{"version":"1.9.0","date":"2026-09-08","line":"Sign out of your other devices without signing out of the one in your hand. A thread keeps its own typing line, its own mentions and its whole history, and leaving a server takes your picture with it."},{"version":"1.8.16-beta.1","date":"2026-09-08","line":"The first build with per-device sign-out in it.","channel":"beta"},{"version":"1.8.15","date":"2026-09-07","line":"Packaging only."},{"version":"1.8.14","date":"2026-09-07","line":"Threads and forum channels, server side. A server can also load plugins, and every member can see which ones it runs."},{"version":"1.8.13","date":"2026-09-06","line":"An emoji import stops hiding every other emoji, and one request answers how each member got in."},{"version":"1.8.12","date":"2026-09-05","line":"A sidebar row can be a folder holding other rows."},{"version":"1.8.11","date":"2026-09-05","line":"A mute stops somebody typing as well as talking, and link previews follow every redirect hop before fetching."},{"version":"1.8.10","date":"2026-09-04","line":"The owner can set the owner role's colour."},{"version":"1.8.9","date":"2026-09-03","line":"An invite code can carry a role, and callers' addresses are no longer written to the log."},{"version":"1.8.8","date":"2026-09-03","line":"Packaging only."},{"version":"1.8.7","date":"2026-09-03","line":"The server says which voice rooms a member may enter, and which channel templates exist."},{"version":"1.8.6","date":"2026-09-03","line":"The server says which channels a member may post in."},{"version":"1.8.5","date":"2026-09-03","line":"Mentions are stored server-side, a member can hold more than one role, and reading an upload needs a token."},{"version":"1.8.4-beta.1","date":"2026-09-02","line":"Packaging only.","channel":"beta"},{"version":"1.8.3","date":"2026-09-02","line":"A person can be reported, not only a message, and the SFU signing key is generated instead of left empty."},{"version":"1.8.2","date":"2026-09-02","line":"One member can block another."},{"version":"1.8.1-beta.1","date":"2026-09-01","line":"The voice token carries whether you may speak, so the SFU can refuse a microphone.","channel":"beta"},{"version":"1.8.0","date":"2026-09-01","line":"Per-channel permissions, by role, with templates."},{"version":"1.7.0","date":"2026-08-31","line":"A server can be set to admit people by request, and an upload's token is checked before anything is buffered."},{"version":"1.6.21","date":"2026-08-31","line":"A busy metrics port no longer stops the server starting."},{"version":"1.6.20-beta.1","date":"2026-08-31","line":"Packaging only.","channel":"beta"},{"version":"1.6.19","date":"2026-08-31","line":"The HTTP surface is rate-limited, metrics move to a port the world cannot reach, and an attachment travels with its message."},{"version":"1.6.18-beta.1","date":"2026-08-31","line":"Packaging only.","channel":"beta"},{"version":"1.6.17","date":"2026-08-31","line":"A channel can require a rank to post in, and the SFU's shared secret stops being handed to every browser."},{"version":"1.6.16-beta.1","date":"2026-08-30","line":"A direct message and an upload are both stored without the server being able to read either, and it ships the certificate authority's keys instead of fetching them.","channel":"beta"},{"version":"1.6.15-beta.1","date":"2026-08-29","line":"Starting a call is its own permission.","channel":"beta"},{"version":"1.6.14-beta.1","date":"2026-08-29","line":"Group direct messages, and you can ring somebody in one. SVG is skipped when an emoji ZIP is imported.","channel":"beta"},{"version":"1.6.13-beta.1","date":"2026-08-29","line":"Direct messages, server side, with a cap on how long a message can be.","channel":"beta"},{"version":"1.6.12","date":"2026-08-27","line":"A reconnecting socket is told to retry rather than that it is forbidden."},{"version":"1.6.11","date":"2026-08-27","line":"The log says who dropped and from where."},{"version":"1.6.10","date":"2026-08-25","line":"The SFU decides who is in voice."},{"version":"1.6.9","date":"2026-08-25","line":"The stuck-updater reminder points at a download rather than at GitHub."},{"version":"1.6.8","date":"2026-08-25","line":"A member's designed look is kept beside their nickname."},{"version":"1.6.7","date":"2026-08-24","line":"Packaging only."},{"version":"1.6.6","date":"2026-08-23","line":"Packaging only."},{"version":"1.6.5","date":"2026-08-23","line":"A wrong clock on somebody's machine no longer makes the server unjoinable."},{"version":"1.6.4","date":"2026-08-22","line":"Stranded clients are sent to the release download rather than to a pending folder."},{"version":"1.6.3","date":"2026-08-22","line":"An animated server icon has its frames capped, and every upload decode carries a pixel ceiling."},{"version":"1.6.2","date":"2026-08-21","line":"The update reminder names the version, because the pattern it used matched a broken one."},{"version":"1.6.1","date":"2026-08-21","line":"The server says which addresses it answers on, and can hold a room of one so the Doctor can prove voice works."},{"version":"1.6.0-beta.1","date":"2026-08-21","line":"Roles carry permissions rather than a rung on a ladder, and some grant themselves over time. Bots are their own tier and knock before they are let in.","channel":"beta"},{"version":"1.5.1","date":"2026-08-21","line":"A proxy's address stops counting as proof of being on the LAN, and voice seats stop being derived from a port range."},{"version":"1.5.0","date":"2026-08-21","line":"A local management API for the settings that live in the database, and a native client's own-host origin gets through CORS."},{"version":"1.4.6","date":"2026-08-18","line":"A version it cannot parse is refused rather than compared."},{"version":"1.4.5","date":"2026-08-17","line":"A purged user's files are deleted at the moment they are purged."},{"version":"1.4.3","date":"2026-08-16","line":"First-time setup is only required of a new owner, not of everybody joining."},{"version":"1.4.2","date":"2026-08-14","line":"Packaging only."},{"version":"1.4.2-beta.1","date":"2026-08-14","line":"GRYT_AUTH_MODE is renamed to what it actually does.","channel":"beta"},{"version":"1.4.1-beta.1","date":"2026-08-14","line":"A user id is qualified by the certificate authority that issued it.","channel":"beta"},{"version":"1.4.0","date":"2026-08-13","line":"Packaging only."},{"version":"1.4.0-beta.1","date":"2026-08-12","line":"A server can admit people by request, cap how many one invite brings in per hour, and close the door a banned user came through. One key can speak for several devices.","channel":"beta"},{"version":"1.3.1-beta.1","date":"2026-08-10","line":"Kick, ban, mute and permissions do what they say.","channel":"beta"},{"version":"1.3.0-beta.5","date":"2026-08-10","line":"The server relays where a speaker's face is in their camera frame.","channel":"beta"},{"version":"1.3.0-beta.4","date":"2026-08-09","line":"Uploads stream to disk, and the cap that was never the operator's is gone.","channel":"beta"},{"version":"1.3.0-beta.3","date":"2026-08-08","line":"Emoji import from emoji.gg, SVG accepted again for avatars, icons and chat, and clearing a server icon actually clears it.","channel":"beta"},{"version":"1.3.0-beta.2","date":"2026-08-08","line":"better-sqlite3 is replaced by node:sqlite, so there is no native rebuild on Windows.","channel":"beta"},{"version":"1.3.0-beta.1","date":"2026-08-07","line":"SVG uploads are refused. An SVG can carry scripts, and the server was serving them from its own address. The server also has an identity key now, and proves it on connect rather than on join.","channel":"beta"},{"version":"1.2.0-beta.1","date":"2026-08-05","line":"A hand-started server is reachable from the dev client, and warns when it binds to loopback.","channel":"beta"},{"version":"1.1.5","date":"2026-05-28","line":"Packaging only."},{"version":"1.1.5-beta.2","date":"2026-05-28","line":"Packaging only.","channel":"beta"},{"version":"1.1.5-beta.1","date":"2026-05-28","line":"Packaging only.","channel":"beta"},{"version":"1.0.76","date":"2026-05-27","line":"Packaging only. The release workflow was being sorted out."},{"version":"1.0.75","date":"2026-05-25","line":"LAN discovery works better, and the embedded server starts."},{"version":"1.0.73","date":"2026-03-10","line":"An invite can have a code you choose."},{"version":"1.0.72","date":"2026-03-09","line":"mDNS advertising through an avahi service file."},{"version":"1.0.71","date":"2026-03-09","line":"mDNS can bind to a named network interface."},{"version":"1.0.70","date":"2026-03-09","line":"mDNS advertising can pick which interface it uses."},{"version":"1.0.69","date":"2026-03-03","line":"Webhooks."},{"version":"1.0.68","date":"2026-03-03","line":"A server can be set discoverable, and it relays who is typing."},{"version":"1.0.66","date":"2026-03-02","line":"Voice survives a brief disconnect instead of dropping you, and link previews can match a theme."},{"version":"1.0.65","date":"2026-03-01","line":"A server can be opened to the LAN."},{"version":"1.0.63","date":"2026-03-01","line":"Packaging only."},{"version":"1.0.62","date":"2026-03-01","line":"Packaging only."},{"version":"1.0.61","date":"2026-03-01","line":"Packaging only."}],"voice":[{"version":"1.0.75","date":"2026-09-29","line":"A screen share that started while your upload was fast and then slowed down could stay frozen for good. The SFU was throwing away resent video packets as if they were replays. It keeps them now, so the share recovers."},{"version":"1.0.74","date":"2026-09-28","line":"The SFU tells apps how much upload it accepts per person, if whoever runs it has set a cap, so the camera and screen share can split what's there instead of freezing."},{"version":"1.0.73","date":"2026-09-25","line":"When a channel's camera, screen sharing or speaking permission is taken away during a call, the SFU stops forwarding that stream within half a second, and lets it through again when it's given back, without anyone rejoining."},{"version":"1.0.72","date":"2026-09-25","line":"In a group call, you no longer hear or see someone you've blocked. They stay in the room, and everyone else hears them as before."},{"version":"1.0.71","date":"2026-09-24","line":"The SFU now listens to how big each viewer draws a video, stops sending it to anyone who can't see it, and tells the sender, so an app that supports it can send less or pause video nobody is watching. Apps that don't say anything get video exactly as before."},{"version":"1.0.70","date":"2026-09-24","line":"The SFU now turns away camera and screen video from anyone a channel doesn't allow to share it. Until now only the server checked, so a modified app could still send video into a room that had it turned off. It needs server 1.10.25 to know who's allowed, and with an older server it lets video through like before."},{"version":"1.0.69","date":"2026-09-21","line":"After a slow start, a camera could stay stuck at a low bitrate for the rest of the call, even once the connection had room again. The SFU used to ask every camera and screen share for a keyframe every two seconds. Now it only passes on the requests viewers make. Its receiver reports also let the sender measure the round-trip time, which it uses to decide how much to send."},{"version":"1.0.68","date":"2026-09-15","line":"SFU_METRICS_HOST sets the address the metrics port listens on, the same way SFU_CONTROL_HOST does for registration. It listens on every address when unset, as before."},{"version":"1.0.67","date":"2026-09-15","line":"SFU_CONTROL_HOST sets the address the registration port listens on. It listens on every address when unset, as before."},{"version":"1.0.66","date":"2026-09-15","line":"An SFU that cannot bind its control port refuses to start, instead of running and sending the servers it turns away to whatever else holds that port."},{"version":"1.0.65","date":"2026-09-09","line":"Registration moves off the SFU's public port, so a stranger can no longer point their own server at yours and use it to carry their calls, and the servers already using it keep working without a config change."},{"version":"1.0.64","date":"2026-09-06","line":"Housekeeping only. Nothing changed in how voice works."},{"version":"1.0.63","date":"2026-09-03","line":"Addresses nobody advertised are no longer offered while a call is being set up."},{"version":"1.0.62","date":"2026-09-02","line":"Packaging only.","channel":"beta"},{"version":"1.0.61","date":"2026-09-02","line":"An empty signing secret is refused at startup."},{"version":"1.0.60","date":"2026-09-01","line":"A token that does not grant speak is refused the microphone, rather than muted after the fact.","channel":"beta"},{"version":"1.0.59","date":"2026-08-31","line":"Metrics move to a port the internet cannot reach."},{"version":"1.0.58","date":"2026-08-31","line":"Each person gets their own voice token instead of the password every browser had. A call somebody has been sitting in alone ends itself."},{"version":"1.0.57","date":"2026-08-29","line":"Patched pion and x/crypto releases.","channel":"beta"},{"version":"1.0.56","date":"2026-08-25","line":"A connection that stops answering is dropped instead of held open."},{"version":"1.0.55","date":"2026-08-24","line":"It says why before hanging up, instead of dropping the connection without a word."},{"version":"1.0.54","date":"2026-08-23","line":"Link-local addresses are left out of what gets offered for a call."},{"version":"1.0.53","date":"2026-08-23","line":"A track whose sender has gone stops being forwarded."},{"version":"1.0.52","date":"2026-08-22","line":"A renegotiation request is never dropped, so turning a camera on mid-call arrives."},{"version":"1.0.51","date":"2026-08-21","line":"The log says which addresses each listener answers on."},{"version":"1.0.50","date":"2026-08-21","line":"Media takes one UDP port instead of a range, so the firewall rule is one line."},{"version":"1.0.49","date":"2026-08-13","line":"Packaging only."},{"version":"1.0.48","date":"2026-08-08","line":"Release plumbing only.","channel":"beta"},{"version":"1.0.47","date":"2026-05-28","line":"Packaging only."},{"version":"1.0.46","date":"2026-05-25","line":"A frozen picture recovers sooner.","channel":"beta"},{"version":"1.0.45","date":"2026-03-09","line":"The health check tests UDP, not only that the process is up.","channel":"beta"},{"version":"1.0.44","date":"2026-03-05","line":"The log names the codec on each track.","channel":"beta"},{"version":"1.0.43","date":"2026-03-03","line":"Housekeeping only.","channel":"beta"},{"version":"1.0.42","date":"2026-03-03","line":"H.264 is preferred over the other codecs.","channel":"beta"},{"version":"1.0.41","date":"2026-03-03","line":"Video is forwarded a layer at a time, so a slow connection gets a smaller picture.","channel":"beta"},{"version":"1.0.40","date":"2026-03-01","line":"A connection caught mid-negotiation no longer wedges."},{"version":"1.0.39","date":"2026-03-01","line":"Documentation only."},{"version":"1.0.38","date":"2026-03-01","line":"Configuration loading is fixed."},{"version":"1.0.37","date":"2026-03-01","line":"A stale connection is evicted when the same person joins again."}],"images":[{"version":"1.5.0","date":"2026-10-13","line":"The media worker reads and writes uploads on disk only, like the server.","changes":[{"kind":"changed","text":"S3 support is gone. A worker that still has S3 settings ignores them and uses the server's data folder, where server 1.11.0 copies the old bucket."}]},{"version":"1.5.0-beta.1","date":"2026-10-13","line":"Beta: the media worker reads and writes uploads on disk only, like the server.","changes":[{"kind":"changed","text":"S3 support is gone. A worker that still has S3 settings ignores them and uses the server's data folder, where server 1.11.0 copies the old bucket."}],"channel":"beta"},{"version":"1.4.1","date":"2026-10-05","line":"Emoji keep their shape when the worker draws them: 128 pixels tall, up to 512 wide.","changes":[{"kind":"changed","text":"A wide emoji stays wide. It's drawn 128 pixels tall at any width up to 512, the same as the server drew it before emoji moved to the worker."}]},{"version":"1.4.0","date":"2026-10-05","line":"Chat videos are converted to a fresh file with their sound kept, and nothing else from the upload.","changes":[{"kind":"security","text":"A video sent in chat is decoded in the locked-down ffmpeg and written out again: AV1 with AAC sound, at most 1280 pixels on the long side and 30 frames a second. Only the picture and the first sound track are kept. Needs server 1.10.53."}]},{"version":"1.3.1","date":"2026-10-05","line":"Outside Docker, the worker no longer runs whatever ffmpeg it finds on your machine.","changes":[{"kind":"security","area":"self-hosting","text":"Run in production without Docker, the worker used the system's ffmpeg to make chat-video previews, as your own user. It doesn't anymore, so those videos get no preview. They still play. Set GRYT_ALLOW_HOST_FFMPEG=1 if you want the old behaviour back. Docker and servers hosted from the app are unchanged."}]},{"version":"1.3.0","date":"2026-10-05","line":"Avatars, banners and chat pictures are redrawn before anyone sees them, banners and avatars can be short videos, and video posters work again.","changes":[{"kind":"security","text":"A new avatar, banner, emoji or chat picture is held back until the worker has decoded it and written a fresh copy, and only that copy is ever served. The decoding happens in its own locked-down process with no access to the server's files or keys. Needs server 1.10.51 or later."},{"kind":"new","text":"A banner or avatar can be a video. The worker turns it into a silent AV1 clip of at most ten seconds, at the card's own size, with a still frame for places that show a picture."},{"kind":"fixed","text":"Since 1.2.9 the locked-down ffmpeg couldn't start on some Linux hosts, so uploaded videos got no poster frame. It starts everywhere now, and the worker checks it at startup and logs the result."},{"kind":"changed","text":"Animated pictures keep their first 300 frames. A very long GIF used to come out as an avatar of several megabytes that every member had to download."}]},{"version":"1.2.9","date":"2026-09-25","line":"The video decoder that makes poster frames now runs locked away from everything else, and the image is less than half the size.","changes":[{"kind":"security","text":"ffmpeg now runs as its own user in an empty folder, with no environment, no network and no way to touch other processes. It only gets the one file it's decoding and a pipe for its output. A decoder bug in a stranger's upload can no longer reach the worker's storage or credentials."},{"kind":"changed","text":"ffmpeg is now a small build with only the formats Gryt reads, pinned and signature-checked, so the image went from about 270 MB to about 103 MB. If you set a user: for the worker in your compose file, remove it, or videos won't get posters."}]},{"version":"1.2.8","date":"2026-09-24","line":"The image worker now makes the poster frame for uploaded videos, with ffmpeg locked to a short list of formats and codecs, a memory cap and a time limit. It also stores files in the right folder when the server uses filesystem storage.","changes":[{"kind":"security","text":"Video poster frames used to come from whatever ffmpeg the server found on its PATH, run on a stranger's upload with no limits. The worker makes them now, and only reads mp4, webm, mkv and mov with h264, hevc, vp8, vp9 or AV1, under a 1 GiB memory cap and a time limit. Anything else gets no poster. The image is larger because it now includes ffmpeg."},{"kind":"fixed","text":"With filesystem storage and no bucket name set, thumbnails went into a folder the server never read. The worker uses the same default folder as the server now."}]},{"version":"1.2.7","date":"2026-09-23","line":"The health endpoint answers on loopback only by default now, instead of on every interface.","changes":[{"kind":"security","text":"The health endpoint answered on every network interface, handing anyone on the same network the worker's version and its processing counters. It binds to 127.0.0.1 by default now. The Docker image still binds every interface, since Compose publishes the port and the server dials the worker from a second container."}]},{"version":"1.2.6","date":"2026-09-10","line":"Housekeeping only."},{"version":"1.2.5","date":"2026-09-04","line":"Packaging only."},{"version":"1.2.4","date":"2026-09-04","line":"Housekeeping only.","channel":"beta"},{"version":"1.2.3","date":"2026-08-29","line":"sharp 0.35, and one fewer dependency parsing files strangers uploaded.","channel":"beta"},{"version":"1.2.2","date":"2026-08-13","line":"Packaging only."},{"version":"1.2.1","date":"2026-08-08","line":"It says which version it is, so the server can tell.","channel":"beta"},{"version":"1.2.0","date":"2026-08-08","line":"node:sqlite instead of better-sqlite3, so there is no native rebuild.","channel":"beta"},{"version":"1.1.0","date":"2026-08-07","line":"Every upload has its dominant colour worked out while the thumbnail is made, and avatar thumbnails that came out too small are rebuilt.","channel":"beta"},{"version":"1.0.6","date":"2026-03-09","line":"A smaller image, with the native build toolchain taken out of it.","channel":"beta"},{"version":"1.0.5","date":"2026-03-01","line":"Object storage is set up asynchronously, and its errors are reported."},{"version":"1.0.4","date":"2026-02-28","line":"Release plumbing only."},{"version":"1.0.3","date":"2026-02-28","line":"The health check works, and the data directory is created with the permissions it needs."},{"version":"1.0.2","date":"2026-02-28","line":"The first build: thumbnails and avatar compression, on amd64 and arm64."}],"securityNotices":[{"id":"gryt-server-1.10.19-voice-join","surface":"server","fixedIn":"1.10.19","title":"Members could join voice channels the app kept them out of","url":"https://gryt.chat/blog/security-update-gryt-server-1-10-19","published":"2026-09-21"},{"id":"gryt-server-1.10.19-folder-names","surface":"server","fixedIn":"1.10.19","title":"Folder names reached members who couldn't see into them","url":"https://gryt.chat/blog/security-update-gryt-server-1-10-19","published":"2026-09-21"},{"id":"GHSA-pwj4-mw52-f7cj","surface":"server","fixedIn":"1.10.15","title":"Members' sign-in tokens were sent to other members","url":"https://gryt.chat/blog/security-update-gryt-server-1-10-15","published":"2026-09-15"},{"id":"GHSA-whvq-3x27-w5jv","surface":"server","fixedIn":"1.10.15","title":"Channel messages reached people who could not read the channel","url":"https://gryt.chat/blog/security-update-gryt-server-1-10-15","published":"2026-09-15"},{"id":"GHSA-w9c7-pp72-54xg","surface":"server","fixedIn":"1.10.14","title":"Link previews and webhook pictures could reach the server's own network","url":"https://gryt.chat/blog/security-update-gryt-server-1-10-15","published":"2026-09-15"},{"id":"GHSA-m3qc-p5wr-2cq9","surface":"server","fixedIn":"1.10.8","title":"Other members could open files from private channels and direct messages","url":"https://gryt.chat/blog/security-update-gryt-server-1-10-15","published":"2026-09-15"}]}