Skip to main content
Two things that were broken in a way nobody could see, and one new plugin.

Plugins exist now

No plugin has ever reached a user. Cordial has shipped a plugin system, documented it, and tested it — and not one packaging path installed the plugins/ directory, including the Flatpak. The folder the code has searched since the system was written has never existed on any machine. So Discord Presence and Flag Inspector have been real, working, and invisible to everybody. They install now, in all five formats, and appear in Settings under Plugins. That is the honest answer to “where do you find plugins on Cordial”: you couldn’t, and it was not because there is no store.

FPS Flex

A new built-in plugin. Roblox’s Android build asks Vulkan for FIFO, which pins presentation to your display’s refresh — right on a phone, wrong on a desktop with a faster panel. FPS Flex takes that cap off. It ships switched off. Uncapping presentation makes the GPU render frames nobody asked for, which on a laptop is heat and battery, and a plugin that arrives because you installed Cordial should not change how your machine behaves until you choose it. Settings → Plugins → FPS Flex. It can be set to a specific mode instead of uncapped, and your own flags.json still overrules it — a plugin cannot quietly take a setting you made by hand.

Audio finds its own backend

Cordial never detected an audio backend. The default was PipeWire and nothing else was tried unless you named it, so a machine without PipeWire was told it had no audio while ALSA, PulseAudio and OSS sat unexamined. Naming one did not help either: three checks asked “is PipeWire here” before the code that picks a backend ever ran, so CORDIAL_AUDIO_HOST had no effect at all. OSS support shipped in 0.8.0 and has never once been reachable. Now, with nothing set, Cordial probes PipeWire, then PulseAudio, then ALSA, then OSS, and uses the first that answers — real probes, not guesses. If you have PipeWire nothing changes; it is asked first. The machines that change are the ones that were getting silence. It also says which backend it chose, at startup, in the log. That line did not exist, and a user spent an evening unable to tell whether their setting had been seen. CORDIAL_AUDIO_HOST is now case-insensitive too.

Controllers say what they are

Cordial reads the kernel’s own device name and works out whether a pad is an Xbox, PlayStation or Nintendo one. Gamepad support is still off by default — Roblox needs to be told which kind of controller it is and nothing available says which number means which console, so shipping a guess would show PlayStation owners Xbox glyphs. CORDIAL_GAMEPAD=1 turns it on for anyone willing to help work the mapping out.

What is still broken

The startup freeze, when signed in. Not fixed. The client reaches the home screen, draws one frame and stops. Reopening usually works, and it happens less on mains power than on battery. A black canvas inside an experience. Joining works; what you see once there often does not. Voice chat does not work. The microphone stays shut and there is no downlink. Whether OSS actually plays is unproven. The backend is now reachable, which it was not before, but every machine it has been tested on had PipeWire. If you are the person who needed this, you will be the first to find out. The AppImage’s embedded browser needs WebKitGTK 6.0 on the host. Ordinary sign-in does not use it — it appears for two-factor prompts and email recovery — so most people will never meet it. If you use 2FA, prefer the Flatpak, .deb or .rpm. Ubuntu 24.04 LTS cannot run the .deb: Cordial needs GTK 4.20 and the LTS ships 4.14. Use the AppImage or the Flatpak, both of which carry their own. Nothing is signed. The README explains what that does and does not protect you from.