# Cordial - [Cordial](https://cordial.mintlify.app/index.md): Roblox's Android client, running natively on Linux. - [Installing Cordial](https://cordial.mintlify.app/install.md): Install Cordial from a Flatpak, AppImage, deb, rpm, Arch package, Nix or source, and get Roblox's Android build into it. - [Status](https://cordial.mintlify.app/status.md): What works in Cordial today, what is partly working, and what is broken. - [Checking this machine](https://cordial.mintlify.app/doctor.md): Run cordial --doctor to see whether this machine can run Roblox, and what to fix if it cannot. - [Changing FastFlags](https://cordial.mintlify.app/fastflags.md): Set Roblox FastFlags in Cordial, see which layer wins, and find the flags and keys Cordial itself reads. - [Asset overrides](https://cordial.mintlify.app/asset-overrides.md): Replace Roblox's built-in textures, fonts and interface images without modifying any files. - [Shaders (vkBasalt)](https://cordial.mintlify.app/shaders.md): Add sharpening and anti-aliasing over the game with vkBasalt, an open-source Vulkan layer. - [MangoHud overlay](https://cordial.mintlify.app/mangohud.md): Draw frame rate, a frame-time graph and CPU and GPU load over the game with MangoHud. - [Game title bar](https://cordial.mintlify.app/title-bar.md): Choose a default, compact or hidden title bar for the game window. - [Controllers](https://cordial.mintlify.app/controllers.md): Controllers work out of the box, but the on-screen button prompts may show the wrong brand. - [Discord Rich Presence](https://cordial.mintlify.app/rich-presence.md): Show what you are playing in Discord, using the Discord Presence plugin that comes with Cordial. - [NVIDIA graphics](https://cordial.mintlify.app/nvidia.md): What Cordial does on NVIDIA GPUs, the known driver problems, and what to try if the game will not start or crashes. - [Playing in VR](https://cordial.mintlify.app/vr.md): Run Roblox's Meta Quest build on your PC and play it in a headset through an OpenXR runtime. - [Plugins](https://cordial.mintlify.app/plugins-overview.md): What plugins are for, what they can and cannot do, and how to install one. - [Installing plugins](https://cordial.mintlify.app/plugins.md): Getting Deno, loading a plugin from a folder while you develop it, and what changes apply without a restart. - [Writing a plugin](https://cordial.mintlify.app/plugin-development.md): What a Cordial plugin is for, how it talks to Cordial, and the shortest path from an empty folder to a working one. - [The Cordial plugin API](https://cordial.mintlify.app/plugin-api.md): Reference for what a Cordial plugin can ask for, and the protocol it speaks. - [Plugin API: getting started](https://cordial.mintlify.app/plugin-api/getting-started.md): Write, grant and run a first plugin, and what plugin.json may contain. - [Plugin API: protocol and sandbox](https://cordial.mintlify.app/plugin-api/protocol.md): The wire format between Cordial and a plugin, what Deno permits, and how a plugin is started. - [Plugin API: capabilities and grants](https://cordial.mintlify.app/plugin-api/capabilities.md): The fifteen capabilities, default deny, what a refusal looks like, and how grants are stored and changed. - [Plugin API: events](https://cordial.mintlify.app/plugin-api/events.md): Core events Cordial publishes, events plugins declare for each other, and what is and is not delivered. - [Plugin API: FastFlags](https://cordial.mintlify.app/plugin-api/flags.md): How flag layers resolve, and the flags.list, flags.get and flags.set methods. - [Plugin API: notifications, presence, state, settings and overlays](https://cordial.mintlify.app/plugin-api/surface.md): Reference for notify.send, presence.set, url.open, state.get, settings, preferences and asset overlays. - [Plugin API: what you cannot do](https://cordial.mintlify.app/plugin-api/limits.md): The things a plugin cannot do, and the ADR behind each. - [`cordial.runtime/1`: the runtime spec](https://cordial.mintlify.app/runtime-spec.md): The draft protocol between Cordial and a runtime that turns Play into a running Roblox client. Not implemented yet. - [How Cordial works](https://cordial.mintlify.app/architecture.md): A map of Cordial's parts, and the rules that shape how it answers the Roblox engine. - [Architectures](https://cordial.mintlify.app/multiarch.md): Which CPU architectures Cordial runs on, how the Roblox build is chosen, and what has and has not been checked on aarch64. - [Cordial 0.23.2: the game follows a window resize](https://cordial.mintlify.app/releases/v0.23.2.md) - [Cordial 0.23.1: FastFlags that stay set, and a frame rate limit](https://cordial.mintlify.app/releases/v0.23.1.md) - [Cordial 0.23.0: doctor, NVIDIA, and no more grey screen without Vulkan](https://cordial.mintlify.app/releases/v0.23.0.md) - [Cordial 0.22.0: settings that apply without a restart](https://cordial.mintlify.app/releases/v0.22.0.md) - [Cordial 0.21.1: the packages 0.21.0 was missing](https://cordial.mintlify.app/releases/v0.21.1.md) - [Cordial 0.21.0: plugins, mouse acceleration](https://cordial.mintlify.app/releases/v0.21.0.md) - [Cordial 0.20.1: Flatpak updates work again](https://cordial.mintlify.app/releases/v0.20.1.md) - [Cordial 0.20.0 — shaders, text boxes](https://cordial.mintlify.app/releases/v0.20.0.md) - [Cordial 0.19.0 — private servers, plugins without restarting](https://cordial.mintlify.app/releases/v0.19.0.md) - [Cordial 0.18.0 — no more grey screen on launch, and ARM builds](https://cordial.mintlify.app/releases/v0.18.0.md) - [Cordial 0.17.0 — a warning before running two profiles at once](https://cordial.mintlify.app/releases/v0.17.0.md) - [Cordial 0.16.0 — the crash on the second launch is fixed](https://cordial.mintlify.app/releases/v0.16.0.md) - [Cordial 0.15.1 — the launcher checks the build it was handed](https://cordial.mintlify.app/releases/v0.15.1.md) - [Cordial 0.15.0 — voice chat, and browser Play picks your account](https://cordial.mintlify.app/releases/v0.15.0.md) - [Cordial 0.14.2 — typing in your own alphabet, and staying signed in](https://cordial.mintlify.app/releases/v0.14.2.md) - [Cordial 0.14.1 — closing the game is no longer a crash](https://cordial.mintlify.app/releases/v0.14.1.md) - [Cordial 0.14.0 — the AppImage runs on something other than the machine that built it](https://cordial.mintlify.app/releases/v0.14.0.md) - [Cordial 0.13.2 — bwrap was chosen on hosts where it cannot run](https://cordial.mintlify.app/releases/v0.13.2.md) - [Cordial 0.13.1 — the plugins had nothing to run on](https://cordial.mintlify.app/releases/v0.13.1.md) - [Cordial 0.13.0 — the plugins were never being started](https://cordial.mintlify.app/releases/v0.13.0.md) - [Cordial 0.12.1 — the Flatpak build, and a claim 0.12.0 got wrong](https://cordial.mintlify.app/releases/v0.12.1.md) - [Cordial 0.12.0 — the client says why it failed](https://cordial.mintlify.app/releases/v0.12.0.md) - [Cordial 0.11.0 — the plugins that shipped and did nothing](https://cordial.mintlify.app/releases/v0.11.0.md) - [Cordial 0.10.0 — plugins, and audio that finds itself](https://cordial.mintlify.app/releases/v0.10.0.md) - [Cordial 0.9.0 — you can actually download it](https://cordial.mintlify.app/releases/v0.9.0.md) - [Cordial 0.8.0 — it fetches Roblox itself, and you can finally download it](https://cordial.mintlify.app/releases/v0.8.0.md) - [ADR-001: In-process hooking of the Roblox process](https://cordial.mintlify.app/adr/ADR-001-in-process-hooking.md) - [ADR-002: Core shell, UI handoff, and the cold-start ordering](https://cordial.mintlify.app/adr/ADR-002-core-shell-and-ui-handoff.md) - [ADR-003: Plugins have no memory access to Cordial](https://cordial.mintlify.app/adr/ADR-003-plugin-isolation.md) - [ADR-004: Plugins do not override Roblox's assets](https://cordial.mintlify.app/adr/ADR-004-plugin-asset-overrides.md) - [ADR-005: The flag service has two surfaces, because flags have two lifetimes](https://cordial.mintlify.app/adr/ADR-005-flag-service.md) - [ADR-006: Plugins may declare their own events, and some plugins ship with Cordial](https://cordial.mintlify.app/adr/ADR-006-plugin-events-and-first-party.md) - [ADR-007: Plugins never hold host permissions; Cordial brokers them](https://cordial.mintlify.app/adr/ADR-007-host-resources-are-brokered.md) - [ADR-008: Plugins are TypeScript on Deno](https://cordial.mintlify.app/adr/ADR-008-plugins-are-typescript-on-deno.md) - [ADR-009: Cordial is capturable, and ships no overlay injection point](https://cordial.mintlify.app/adr/ADR-009-capture-yes-overlay-injection-no.md) - [ADR-010: Plugins may overlay Roblox's assets, non-destructively](https://cordial.mintlify.app/adr/ADR-010-plugin-asset-overlays.md) - [ADR-011: Wayland is the display backend, and the window is libadwaita](https://cordial.mintlify.app/adr/ADR-011-wayland-and-libadwaita.md) - [ADR-012: A profile is storage; an instance is a window](https://cordial.mintlify.app/adr/ADR-012-profiles-and-instances.md) - [ADR-013: Configuration belongs to the profile; code belongs to the machine](https://cordial.mintlify.app/adr/ADR-013-per-profile-configuration.md) - [ADR-014: Plugins are published through a signed static index, and unpacked as hostile](https://cordial.mintlify.app/adr/ADR-014-plugin-registry-and-unpacking.md) - [ADR-015: Cordial may fetch the Roblox build, and may never ship one](https://cordial.mintlify.app/adr/ADR-015-fetching-the-roblox-build.md) - [ADR-016: A profile can refuse to run without a VPN, checked by a command it names](https://cordial.mintlify.app/adr/ADR-016-per-profile-network-egress.md) - [ADR-017: A local, incremental corpus of Sober's issue tracker](https://cordial.mintlify.app/adr/ADR-017-sober-issue-corpus.md) - [ADR-018: Plugins get an OS sandbox under Deno, and it does not replace the broker](https://cordial.mintlify.app/adr/ADR-018-plugin-sub-sandboxing.md) - [ADR-019: A development control surface, in coordinates and pixels](https://cordial.mintlify.app/adr/ADR-019-development-control-surface.md) - [ADR-020: A plugin declares its preferences; Cordial draws them](https://cordial.mintlify.app/adr/ADR-020-declarative-plugin-preferences.md) - [ADR-021: Everything is a plugin; code is a property, not a category](https://cordial.mintlify.app/adr/ADR-021-everything-is-a-plugin.md) - [ADR-022: A plugin observes, decides and acts; that is what justifies a runtime](https://cordial.mintlify.app/adr/ADR-022-plugins-observe-decide-act.md) - [ADR-023: PipeWire is the primary audio backend, and the others go behind a seam](https://cordial.mintlify.app/adr/ADR-023-host-audio-backends.md) - [ADR-024: X11 is supported again, and it gets the editor](https://cordial.mintlify.app/adr/ADR-024-x11-is-supported-again.md) - [ADR-025: Cordial may fetch the build from a third-party mirror, if it can prove Roblox signed it](https://cordial.mintlify.app/adr/ADR-025-fetching-from-a-third-party-mirror.md) - [ADR-026: Cordial publishes what it observes, and plugins may never veto it](https://cordial.mintlify.app/adr/ADR-026-the-core-event-bus.md) - [ADR-027: Plugins describe an overlay; Cordial draws it](https://cordial.mintlify.app/adr/ADR-027-plugin-overlays.md) - [ADR-028: X11 input comes from XInput2, with the warp as the fallback](https://cordial.mintlify.app/adr/ADR-028-x11-input-comes-from-xinput2.md) - [ADR-029: An overlay is three decisions, and every overlay makes all three](https://cordial.mintlify.app/adr/ADR-029-overlays-are-three-decisions.md) - [ADR-030: Reports arrive from Discord, as forms rather than as messages](https://cordial.mintlify.app/adr/ADR-030-reports-arrive-from-discord.md) - [ADR-031: The launcher outlives its window, and the client is a child process](https://cordial.mintlify.app/adr/ADR-031-the-launcher-outlives-its-window.md) - [ADR-032: the AppImage's build base moves to Ubuntu 24.04, and the version floor that blocked it was wrong](https://cordial.mintlify.app/adr/ADR-032-appimage-build-base-moves-to-ubuntu-24-04.md) - [ADR-033: Roblox builds live in a keyed store, and a profile names one](https://cordial.mintlify.app/adr/ADR-033-roblox-versions-are-a-keyed-store.md) - [ADR-034: Symbol resolution asks the library, not a checked-in list](https://cordial.mintlify.app/adr/ADR-034-symbol-resolution-asks-the-library.md) - [ADR-035: Match browser joins to saved accounts](https://cordial.mintlify.app/adr/ADR-035-browser-account-routing.md) - [ADR-036: The unsafe/safe boundary is a lint, not a convention](https://cordial.mintlify.app/adr/ADR-036-unsafe-is-a-boundary-not-a-convention.md) - [ADR-037: The build store's three writers share one lock, and an entry now proves its own bytes](https://cordial.mintlify.app/adr/ADR-037-one-lock-and-a-content-hash-for-the-build-store.md) - [ADR-038: A running client reconciles its plugin set; nothing pushes to it](https://cordial.mintlify.app/adr/ADR-038-plugin-hot-swap.md) - [ADR-039: A runtime-backend seam is cheap to describe and not worth building yet](https://cordial.mintlify.app/adr/ADR-039-a-runtime-backend-seam-and-why-macos-waits.md) - [ADR-040: The engine already runs mimalloc, so there is no allocator to switch](https://cordial.mintlify.app/adr/ADR-040-the-engine-already-runs-mimalloc.md) - [ADR-041: vkBasalt post-processing is a driver-stack layer, not in-process hooking](https://cordial.mintlify.app/adr/ADR-041-vkbasalt-post-processing.md) - [ADR-042: Vulkan texture-format queries are counted and, test-only, maskable — nothing is translated](https://cordial.mintlify.app/adr/ADR-042-texture-format-query-observability.md) - [ADR-043: The Roblox build's architecture is the binary's, and choosing another needs a second runtime](https://cordial.mintlify.app/adr/ADR-043-the-roblox-build-is-the-binarys-architecture.md) - [ADR-044: Settings that can change reach a running game](https://cordial.mintlify.app/adr/ADR-044-settings-reach-a-running-game.md) - [ADR-045: One report screen, outside Settings, and a notice on X11](https://cordial.mintlify.app/adr/ADR-045-one-report-screen-outside-settings.md) - [ADR-046: NVIDIA behaviour is gated on the device's vendor id, and says what is inferred](https://cordial.mintlify.app/adr/ADR-046-nvidia-is-gated-on-the-vendor-id.md) - [ADR-047: The canvas is lowered only once GTK has presented a frame](https://cordial.mintlify.app/adr/ADR-047-the-canvas-is-lowered-only-under-a-presented-frame.md) - [ADR-048: Labels and edits from Discord are allowlisted, attributed and logged before they happen](https://cordial.mintlify.app/adr/ADR-048-labels-and-edits-from-discord.md) - [ADR-049: ETC2/EAC is decoded on the CPU where the driver lacks the feature](https://cordial.mintlify.app/adr/ADR-049-etc2-is-emulated-where-the-driver-lacks-it.md) - [ADR-050: Other runtimes are launched, not built](https://cordial.mintlify.app/adr/ADR-050-other-runtimes-are-launched-not-built.md) - [ADR-051: Overrides are handed to the engine again after its own settings refresh](https://cordial.mintlify.app/adr/ADR-051-overrides-are-reapplied-after-the-engines-refresh.md) - [ADR-052: Launcher features reach runtimes through a published spec, and Cordial lists only its own](https://cordial.mintlify.app/adr/ADR-052-the-runtime-spec.md) - [ADR-053: VR is a mode of the Android runtime, and a profile serves both builds](https://cordial.mintlify.app/adr/ADR-053-vr-is-a-mode-of-the-android-runtime.md) - [ADR-054: Cordial owns its Roblox builds, and Sober's copy is an import](https://cordial.mintlify.app/adr/ADR-054-cordial-owns-its-roblox-builds.md) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.