Set a flag
1
Open the editor
Settings → FastFlags is a text editor for your profile’s
flags.json. Paste a list, or type one, and press Apply.2
Write a flat object
3
Start Roblox again
The editor says it applies the next time you press Roblox. A
DF flag can also change in a game that is already running; see When a change takes effect.- Native install
- Flatpak
CORDIAL_FLAGS points the client at another file. It makes one file serve every profile, so it is for experiments.
To choose a graphics backend, use Settings → General → Graphics, not a flag. Cordial decides that before the engine starts.
When a change takes effect
A plugin loaded part-way through a session cannot change a startup flag, whatever it writes.
Cordial puts your overrides back after each Roblox refresh, whatever the family. Each time it prints a
[reapply] line with what it cost. Two limits:
- The first couple of seconds, before the engine’s first fetch, are not covered.
- It re-sends the cached copy of Roblox’s document, so a flag Roblox changed during your session goes back to its older value, as at launch.
CORDIAL_NO_FLAG_REDELIVERY=1 in the client’s environment turns the re-apply off. It exists to confirm that a flag reverts without it.
Why: ADR-051.
Which layer wins
Flags come from several sources and each owns its own file. From lowest precedence to highest:
A plugin never writes to your file. Removing a plugin removes its flags, and when two layers set the same flag the log names both:
~/.config/cordial/flags.json is moved into the first profile that looks for one (ADR-013). The layering itself: ADR-005.
Flags and keys Cordial reads
Besides Roblox’s own flags, these names mean something to Cordial. TheCordial ones are never sent to Roblox.
Graphics optimisation sets these flags, sized to your physical core count:
What the more-cores and fewer-cores choices set
What the more-cores and fewer-cores choices set
“Windows PC - more cores” (
CORDIAL_PERFORMANCE=throughput):“Windows PC - fewer cores” (
CORDIAL_PERFORMANCE=latency) sets only DFIntSimMidPhaseContactPipelineBatchSize to 128 and FIntTaskSchedulerThreadMin to 0.None of these is measured on this project’s hardware, which is why Balanced, which sets nothing, is the default.Raise the frame rate
The Android client has no frame-rate row in its own menu, so there are two separate levers in Cordial’s Settings.
Neither replaces the other. Frame pacing on FIFO caps you at your panel’s rate whatever the limit says. Frame pacing applies at the next launch.
Frame rate limit offers Display refresh (sets nothing), or 90, 120, 144, 165 or 240. A new cap takes effect in a running game at once. Going back to Display refresh takes up to two minutes, because the engine does not unset a flag that Roblox’s settings leave out.
Import a list from another launcher
Settings → FastFlags → Import… reads a Bloxstrap or FishstrapClientAppSettings.json, or Sober’s config.json (only its fflags object), and merges the flags into this profile’s. From a terminal:
--replace starts from empty instead. Values are checked by prefix: FFlag takes True or False, FInt a whole number, and FLog anything, because a log channel takes either a number or a severity and that is not visible from outside.
An entry the check refuses is skipped and named, and the rest are imported. A name with no FastFlag prefix is imported and listed, so a typo shows. The Sober path outside the Flatpak (~/.config/sober/config.json) is INFERRED; only the Flatpak’s has been seen.
If the interface looks coarse
The interface is laid out for a low-density phone: render resolution is 720p anddpiScale is 1.0. For a direct cordial-run launch, raise both:
DebugFRMQualityLevelOverride and the MSAA overrides) change nothing here, because they govern 3D scenes and the signed-out landing page is a 2D interface.