Files
mangotune/PROJECT_MAP.md
T
44r0n7 a36c02bbf7 docs: refresh preview update guidance and repo map
This documents the current preview apply contract, updates the project
map to match the live code paths, and adds the local scratchpad issue
tracking reminder to the workspace instructions.
2026-03-31 17:23:13 -04:00

33 KiB
Raw Blame History

PROJECT_MAP.md

Auto-generated project index. Update this file whenever you add, remove, or significantly change a file or feature.

Last updated: 2026-03-31 - preview update behavior is now documented and partially centralized around shared live-apply helpers (docs/PREVIEW_UPDATE_MAP.md, src/ui/pages/mod.rs), the top config strip uses an inline target picker instead of the old switch-config dialog, per-app config creation now supports a searchable bundled game-config database (data/game_config_db.toml) with documented maintenance workflow, the HUD Order page still reorders real HUD groups with live preview sync but currently uses explicit up/down controls after drag-and-drop proved unstable, MangoTune profiles are now framed as real MangoHud .conf files applied into the active target, and the shell/menu/popup surfaces have been tightened and moved onto app-owned compact popover/layout hooks instead of relying on stock roomy menu chrome


🗺️ Project Overview

MangoTune is a Rust GTK4/libadwaita desktop app for Linux gamers who want to configure MangoHud safely without editing .conf files by hand. It combines schema-aware validation, config-layer awareness, quick launch/testing, and desktop integrations in a native Linux GUI.


🏗️ Architecture Summary

src/main.rs starts the libadwaita app in src/app.rs, which creates the main window in src/window.rs. The window builds page widgets from src/ui/pages/, while config parsing/validation/resolution lives under src/config/, managed live-preview state now lives in src/preview/, system detection under src/system/, launcher/test-process logic under src/launcher/, and launcher-string/platform helpers under src/integrations/.

Representative flow: startup detection/config load -> window.rs builds navigation + shared state -> page/widget edits mutate in-memory AnnotatedConfig -> validator updates inline state/save availability -> parser writes MangoHud config to disk when saved.

Dashboard preview flow: dashboard control change -> in-memory config updates -> src/preview/mod.rs writes a temporary preview-only config -> MangoHud Studio preview reparses the temp file in place for ordinary edits, while true preview-window changes still relaunch without touching the users saved config.


📁 File & Folder Map

Path Role Notes
Cargo.toml Rust manifest App metadata, GTK/libadwaita/runtime dependencies
Cargo.lock Dependency lockfile Pinned crate graph
build.rs Build helper Compiles GSettings schema/assets
README.md User-facing intro Install, rationale, launcher/config-layer behavior
LICENSE Project license MIT
THIRD_PARTY_LICENSES.md Dependency licensing Third-party notice bundle
Makefile Install/build convenience Release install helpers for both mangotune and mangotune-preview
ROADMAP.md Tactical roadmap Tracks current UX direction, near-term milestones, and preview-renderer follow-up
docs/MANGOHUD_OPTION_BEHAVIOR.md Verified MangoHud reference Cross-checked against a local upstream source snapshot plus upstream README.md and data/MangoHud.conf; covers parsing/defaults/positioning rules, special-case options like preset, and the full currently documented option surface MangoTune now represents
docs/MANGOHUD_POSITION_LAB.md Direct MangoHud test notes Documents the native MangoHud position lab, expected semantics, isolated-Xorg workflow on arch.lan, and the right-alignment test matrix
docs/PREVIEW_UPDATE_MAP.md Preview update contract Maps which UI paths use debounced live apply, immediate live apply, restart, or preview-runtime-only updates, and records the current consistency rules
data/ Desktop app assets Desktop entry, metainfo, schema, icon, CSS
data/com.mangotune.MangoTune.gschema.xml GSettings schema Window/app preferences, launcher defaults, remembered profile selection, and studio renderer tuning defaults such as load/FPS/VSync
data/style.css App styling Global CSS hooks for badges, compact dashboard cards, tool-page shells, custom control-row styling, and the newer sharper redesign-inspired visual treatment across shell chrome, sidebar/search/header controls, split/content surfaces, stock-ish GTK surfaces, custom unsaved-changes dialog chrome, section headers, chips, cards, rows, inputs, and callouts, now with a tighter shared mono badge system plus less rounding and denser spacing across the main shells, darker themed container seams between header/sidebar/content areas, plus a distinct active-conflict tint in the layer-stack strip
docs/plan/ Planning/spec docs Architecture, design system, schema, phase plans
src/main.rs Binary entry point Runs MangoTuneApp
src/bin/mangotune-preview/ Companion preview renderer Socket-driven Studio preview app split into main.rs/renderer.rs/scene.rs/socket_api.rs/workload.rs, with direct runtime controls for FPS cap, VSync, VRAM pressure, particle count, particle size, repeated surface passes (gpu_passes), pause state, and CPU interaction steps; the renderer still uses the heavier volumetric particle path and parallel CPU interaction work, but MangoTune now exposes the real knobs directly instead of deriving them from a synthetic load slider
src/bin/preview_probe.rs Dev preview harness Loads a saved profile, launches a controlled preview session, and makes local screenshot-based alignment debugging reproducible
scripts/mangohud-position-lab.sh Direct MangoHud launcher Runs MangoHud directly against glxgears/vkcube, records logs, captures window geometry, saves both app-window and full-root screenshots, and crops the root capture back to the app bounds when overlays are composited separately
scripts/mangohud-position-matrix.sh Direct matrix runner Generates margin-on/off variants from the standard sparse/full right-alignment profiles and captures them through MangoHud directly
src/lib.rs Library root Re-exports core modules for app/tests
src/debug_log.rs In-app diagnostics buffer Shared recent-log ring buffer used by the app shell and config parser, with copy/clear support for the Debug page
src/app.rs Application bootstrap GTK/libadwaita app setup, CSS load, startup detection
src/window.rs Main shell App state, header/actions, sidebar, accordion-style section navigation, async config-bar layer discovery, visible-page rebuilds with scroll-position preservation, a top config strip that now acts as an inline active-target picker plus read-only layer-stack summary, periodic layer-summary refresh with real detected-conflict counts, narrower default sizing and a slimmer sidebar so the app fits better on typical 16:9 desktops, dashboard-first startup without restoring the last visited page, a clearer header-led save/reload/revert/close flow, reset-to-defaults and restore-latest-safety-backup menu actions alongside safety backups, real target switching between writable global/per-app XDG configs with save/discard guarding, a sane MangoTune baseline for reset instead of an empty config, selective app-preference reset for preview/backup defaults, a save-menu Auto backup on save toggle instead of a mostly-empty Preferences screen, explicit shell styling hooks for the header/sidebar/config strip, app-owned compact popovers for the top-bar menus, and an Adwaita in-app unsaved-changes alert sheet instead of a standalone popup window
src/preview/ Managed live preview Preview-session state, temp preview config writing, start/reload/restart/stop flow
src/preview/mod.rs Preview controller Uses a temporary preview config and launches the actual preview/test process directly, including persisted studio load/FPS/VSync settings, live socket-driven Studio runtime updates for load/FPS/VSync/VRAM/particle/pause controls, temp-config live-apply for ordinary Studio edits without signaling/restarting the process, safer studio restart behavior for window-size changes, legacy flag normalization before preview writes, explicit horizontal_stretch=0 serialization for stretch-off sessions, effective HUD-width-based preview sizing, preview-only bounded widths for horizontal auto-layout sessions, per-metric auto-width estimation with separate sparse compact/non-compact tuning, preview-only right-anchor emulation for horizontal right-aligned layouts, and Studio-only post-launch window-size calibration so fractional desktop scaling does not throw off width-sensitive preview placement
src/config/normalize.rs Legacy option cleanup Shared normalization for old flag/bool encodings like key=0/key=1, normalization of old negative offsets back to unsigned values, plus cleanup for the mistaken standalone gpu_load / cpu_load keys; reused by save/load/profile/preview flows
src/config/ MangoHud config domain Parser, schema, validation, resolver, help/types
src/config/parser.rs Config I/O Comment-preserving parse/write, duplicate-key collapse on parse, whitespace-normalized values, safer stale-backup handling, in-memory mutation, and explicit zero serialization for MangoHud flags that default on upstream (horizontal_stretch, frametime, frame_timing, fps, gpu_stats, cpu_stats, legacy_layout, text_outline)
src/config/schema.rs Schema catalog Typed definitions for MangoHud options and categories, now aligned more closely with upstream semantics including unsigned edge offsets, list-valued preset, and most practical upstream options that were previously missing
src/config/validator.rs Validation rules Value validation, dependency/conflict checks, flexible xkb-style keybind parsing, and warning-level handling for legacy benchmark_percentiles
src/config/resolver.rs Layer discovery Finds config sources and effective priority order, with user-facing layer labels tuned for clearer “built-in defaults” vs “saved global config” wording, backup-style helper .conf files filtered out of the detected per-app list, and reusable layer-conflict detection used by both the inspector page and the top shell summary
src/config/types.rs Shared config types AnnotatedConfig, ConfigValue, categories, validation types
src/config/help.rs Help text map UI summaries/default/tooltips plus friendly display titles and polished summaries per key, now loaded from docs/MANGOHUD_OPTION_BEHAVIOR.md instead of the older planning doc
src/system/ Environment detection MangoHud/tool/display/GPU detection and XDG paths
src/system/detect.rs Runtime detection Checks MangoHud/tools/display server/GPU vendor
src/system/paths.rs XDG path logic Resolves MangoHud config locations
src/launcher/ Test launch flow Spawns/stops/reloads MangoHud test processes
src/launcher/runner.rs Process management Launch, stop, reload, and retained X11 window-management helpers from the preview-lab/docking experiments
src/integrations/ External launchers/tools Steam/Lutris/Heroic/GameMode helpers
src/profiles/ Profile storage Save/list/load/delete real MangoHud .conf profile files under MangoTune's XDG config directory, including normalization of legacy values when applying one into the active target
src/ui/ UI layer Page builders and reusable widgets
src/ui/toast.rs Toast helper Shared short-lived toast helper that dismisses older queued messages and gives errors/warnings a slightly longer lifetime
src/ui/widgets/tool_page.rs Shared page/window scaffolds Owns the shared page frame/header, section shells, callouts, and now the reusable utility-window shell used by raw editor and small modal-style utility windows so spacing/frame rules stay consistent
src/ui/pages/mod.rs Page registry Sidebar structure, navigation-page factory, current-config snapshots, search-result routing, and the shared preview-update helpers that now define the two main MangoHud config refresh modes: debounced live apply and immediate live apply
src/ui/pages/overview.rs Dashboard page Dashboard now uses the same flat page-header scaffold and outer spacing as the rest of the app, while focusing on quick everyday tuning: Layout & Position, Make It Readable, Show These Metrics, a compact profile utility strip with icon actions, and a single-line status strip at the bottom. Live Preview and Presets now live on their own dedicated pages under Start, while the dashboard keeps MangoHud-faithful unsigned offsets, uses live apply for the common metric/appearance toggles, and separates Studio runtime controls from true preview-window restart cases
src/ui/pages/live_preview.rs Live Preview page Dedicated Start page for Studio preview launch/apply/restart/stop, preview window size, scene selection, and direct runtime tuning controls without touching the saved MangoHud config, using the same flat page-header scaffold and spacing rules as the rest of the app
src/ui/pages/presets_page.rs Presets page Dedicated Start page for loading the practical starter presets/profile-backed overlay shapes without mixing them into the preview workflow, using the same flat page-header scaffold and spacing rules as the rest of the app
src/ui/pages/debug.rs Debug page Tool-page style diagnostics surface with a live recent-log view, current in-memory config snapshot, and clipboard actions for support/debugging
src/ui/pages/conflicts.rs Layer conflict view Inline cascade/conflict inspection with filter toggles, explicit empty states, and a built-in explanation/repro recipe clarifying that this page only shows layer-on-layer overrides, not validator-style logical conflicts inside a single file
src/ui/pages/appearance.rs Layout page Appearance-layout schema rows
src/ui/pages/colors.rs Color page Appearance-color schema rows regrouped into clearer palette sections, plus moved-in FPS/GPU/CPU signal palettes and friendlier color titles/subtitles sourced from schema help
src/ui/pages/typography.rs Typography page Appearance-typography schema rows, including secondary-size controls for supporting text
src/ui/pages/performance.rs Display config page FPS/frametime/general display options, plus runtime/render-stack details and Gamescope/FSR/HDR controls, with styling controls moved out to Colors and Theme
src/ui/pages/gpu.rs GPU config page GPU-specific metrics options, with signal/load colors moved out to Colors and Theme
src/ui/pages/cpu.rs CPU config page CPU metrics options, with signal/load colors moved out to Colors and Theme
src/ui/pages/memory.rs Memory config page RAM/VRAM swap display options
src/ui/pages/io_network.rs IO/network page Disk/network display options
src/ui/pages/media_player.rs Media player page Media integration metrics
src/ui/pages/battery.rs Battery page Battery-related overlay options
src/ui/pages/keybindings.rs Keybinding page Toggle/shortcut options
src/ui/pages/fps_limits.rs FPS limits page MangoHud frame cap/list options
src/ui/pages/logging.rs Logging page Logging and dump options
src/ui/pages/blacklist.rs Blacklist page Injection/config-exclusion options plus an advanced special-directives section for help and inherit
src/ui/pages/opengl_quirks.rs OpenGL page OpenGL-specific workarounds
src/ui/pages/raw_editor.rs Raw editor Tool-page style raw-config launcher with workspace stats, lighter-use guidance, and a richer editor pop-out now using the shared utility-window shell instead of hand-rolled framing
src/ui/pages/integrations.rs Integrations page Tool-page style Steam/Lutris/Heroic/GameMode helpers with live Steam command generation
src/ui/widgets/toggle_row.rs Schema row factory Builds switch/combo/entry rows plus explicit compact spin-button suffix controls for numeric schema fields, applies verified friendly titles/help text, surfaces inline validation, refreshes live preview after edits, routes palette-style comma-separated color fields to richer swatch controls, treats free-text entries as commit-based preview updates that only fire after an actual edit, and filters typed/pasted junk out of numeric controls at both the key and editable layers instead of only validating later
src/ui/widgets/hotkey_row.rs Hotkey row widget Keybinding editor rows with a modal edit dialog now using the shared utility-window shell instead of a one-off padded box
src/ui/widgets/tool_page.rs Tool-page shell builder Shared custom page hero/section/callout helpers used to move deep pages away from stock preferences layouts, including top-aligned section badges, explicit section-header wrappers, and chip rows that follow the redesign-inspired shell language
src/ui/widgets/color_row.rs Color control widget Hex + color-dialog row with shared live-preview refresh, plus palette-list swatches for comma-separated color fields like fps_color, gpu_load_color, and cpu_load_color; text editing now validates live but only refreshes preview on commit/focus-leave after a real edit, unset swatches now render in a neutral placeholder state, and palette entry fields live in a fixed editor cluster instead of resizing around current content
src/ui/widgets/hotkey_row.rs Hotkey widget Keybinding capture/edit UI with shared live-preview refresh
src/ui/widgets/cascade_view.rs Conflict widget Cascade/layer visualization plus filter-aware visibility helpers
src/ui/widgets/validation_label.rs Validation helper Inline row error presentation
src/ui/widgets/color_utils.rs Shared color helpers Hex/RGBA conversion utilities shared by dashboard and color rows

🧭 Hot Paths

  • Add or change a major window/workflow: src/window.rs, src/ui/pages/mod.rs, affected page module(s), data/style.css
  • Change a MangoHud options validation/type/category: src/config/schema.rs, src/config/help.rs, src/config/validator.rs, affected page in src/ui/pages/
  • Change config parsing or write behavior: src/config/parser.rs, src/config/types.rs, parser tests
  • Change launcher/test-preview behavior: src/preview/mod.rs, src/bin/mangotune-preview.rs, src/launcher/runner.rs, src/ui/pages/overview.rs, data/com.mangotune.MangoTune.gschema.xml, Makefile
  • Change direct MangoHud validation flow: scripts/mangohud-position-lab.sh, scripts/mangohud-position-matrix.sh, docs/MANGOHUD_POSITION_LAB.md
  • Change profile behavior: src/profiles/mod.rs, src/ui/pages/overview.rs
  • Change config-layer/conflict behavior: src/config/resolver.rs, src/ui/pages/conflicts.rs, src/window.rs
  • Change desktop app settings/preferences: data/com.mangotune.MangoTune.gschema.xml, build.rs, src/window.rs
  • Change integration strings/behavior: src/integrations/*.rs, src/ui/pages/integrations.rs

🔑 Key Concepts & Domain Terms

  • AnnotatedConfig: in-memory MangoHud config preserving file lines plus indexed option state
  • Config layer/cascade: MangoHud config priority stack (env > app-local > per-app > global > defaults)
  • SchemaEntry: typed definition for one MangoHud option, including category/dependencies/conflicts
  • Validation state: per-key result map used to block invalid saves and surface inline errors
  • Managed live preview: a preview-only MangoHud config generated from unsaved in-memory edits and applied to a real preview process
  • Companion renderer: mangotune-preview, a dedicated animated preview executable for MangoHud tuning
  • Test launcher: helper flow that launches a real process with MangoHud enabled for verification
  • Profile: a saved real MangoHud .conf file stored under MangoTunes XDG config dir and applied into the active config target on demand

🔗 Persistence / Data Contracts

  • MangoHud global config default: ~/.config/MangoHud/MangoHud.conf (resolved via src/system/paths.rs)
  • Profile storage: ~/.config/mangotune/profiles/*.conf unless MANGOTUNE_PROFILES_DIR overrides it
  • GSettings schema: com.mangotune.MangoTune
  • Preferred preview scene setting: GSettings key preview-scene now defaults to studio
  • Studio preview tuning settings: GSettings keys preview-studio-scene, preview-fps-cap, preview-vsync, preview-vram-pressure, preview-particle-count, preview-particle-size, preview-gpu-passes, and preview-interaction-steps (preview-load remains only as a legacy compatibility key)
  • Companion renderer binary: mangotune-preview is discovered via env override, sibling binary, or PATH
  • Launcher environment contract: MangoTune sets MANGOHUD=1 and MANGOHUD_CONFIGFILE=<config path> for launched preview/test processes
  • Preview temp config contract: live preview writes a temporary MangoHud config under the system temp dir instead of modifying the users saved config, and forces no_display off for preview visibility
  • Config file format contract: MangoHud .conf syntax with comment preservation and “last duplicate wins” behavior
  • Game config hint DB: bundled at data/game_config_db.toml, generated/maintained via scripts/build_game_config_db.py, documented in docs/GAME_CONFIG_DB.md, and used by the per-app config creation flow to search games and suggest likely executable/config names

🖥️ User-Facing Command / Feature Surface

  • Main dashboard with live preview, workspace status, visual position picking, smarter edge-gap controls, quick appearance controls, starter presets, common metrics, profile save/restore/delete, page-jump shortcuts, preview window size controls, and a denser compact layout that uses less vertical space
  • Header-led save flow with Save Config as the single primary save surface, plus secondary actions for saving a copy, discarding unsaved changes, and creating a safety backup
  • Sidebar navigation with search plus accordion-style section expansion, calmer section naming/order, and a less heavy “config layer” top bar
  • Startup now always opens on the dashboard instead of restoring the last visited page
  • Deep settings pages with a custom control-deck shell instead of plain stock preferences groups for the main appearance/display/behavior surfaces
  • Config layer selector + conflict visibility
  • Appearance controls: layout, colors, typography
  • Metrics controls: performance, GPU, CPU, memory, I/O/network, media, battery
  • Behavior controls: keybindings, FPS limits, logging, blacklist
  • Advanced tools: OpenGL quirks, raw editor
  • Live preview/testing: managed Studio-only preview from unsaved edits using mangotune-preview, with dashboard-level defaults, auto-refreshing status, dashboard window-size controls, preview-only no_display override, explicit horizontal_stretch=0 writes when stretch is disabled, effective-HUD-width window sizing for horizontal auto-layout, preview-only right-offset compensation for right-aligned horizontal layouts, Studio-specific post-launch width calibration for scaled desktops, temp-config live-apply for ordinary Studio config edits, debounced live preview writes for high-frequency controls, safer studio restart behavior for true window-size changes, wheel-safe dashboard controls, live runtime updates for Studio load/FPS/VSync, advanced Studio runtime controls for particle density/VRAM pressure/pause, and an in-window control strip plus visible key hints for the studio renderer
  • Integrations: Steam, Lutris, Heroic, GameMode
  • Profiles: save the active config target as a profile, then apply a profile back into the active target

🧪 Test Coverage Map

  • Unit tests live inline in Rust modules such as src/config/parser.rs, src/launcher/runner.rs, src/profiles/mod.rs, src/integrations/steam.rs, and src/ui/pages/overview.rs
  • Parser/schema/validator/resolver changes should get module tests updated where the logic lives
  • Launcher/preview behavior changes usually require tests in src/launcher/runner.rs, src/preview/mod.rs, src/bin/mangotune-preview.rs when practical, and any overview helpers that drive preview state
  • UI shell/page layout currently has light automated coverage; visual/interaction changes need manual GTK testing in addition to cargo test

🧩 Feature Areas & Ownership Map

  • App shell and navigation: src/app.rs, src/window.rs, src/ui/pages/mod.rs, data/style.css
  • MangoHud config engine: src/config/
  • Runtime/system detection: src/system/
  • Preview/test launching: src/preview/, src/bin/mangotune-preview.rs, src/launcher/, src/ui/pages/overview.rs
  • Profiles: src/profiles/, src/ui/pages/overview.rs
  • Desktop integrations: src/integrations/, src/ui/pages/integrations.rs
  • Page-specific UI: src/ui/pages/
  • Reusable controls: src/ui/widgets/

⚠️ Known Issues / Tech Debt

  • Right-side horizontal HUD placement still needs one more deliberate real-user validation pass for the remaining edge cases
  • Main-window geometry drift on XFCE/X11 is only mitigated, not root-caused yet; see docs/WINDOW_GEOMETRY_INVESTIGATION.md
  • UI test coverage is still light, so larger GTK interaction changes continue to rely heavily on manual validation

🔄 Update Triggers

Update this file when:

  • a command, route, page, or feature area is added/removed/renamed
  • a meaningful source file/module is added/removed/renamed
  • a persistence format, config location rule, or launcher contract changes
  • architecture changes materially
  • a major known issue is discovered or resolved

Do not update this file for:

  • tiny wording tweaks
  • purely local refactors with no ownership/structure impact
  • dependency bumps with no workflow impact

📝 Change Log (agent session)

  • 2026-03-22 Initial map created
  • 2026-03-22 Added src/preview/mod.rs, replaced Overview with a dashboard-first live-preview workflow, and removed the old launch-bar widget
  • 2026-03-22 Added ROADMAP.md, persisted the preferred preview scene, and expanded the dashboard with common metric toggles
  • 2026-03-22 Added searchable sidebar navigation, dashboard page-jump actions, and the mangotune-preview companion renderer
  • 2026-03-22 Added dashboard-level controls for the studio preview renderer's scene, load factor, and FPS cap
  • 2026-03-22 Switched preview launching to direct-process tracking and added in-window studio controls with more distinct scene rendering
  • 2026-03-22 Added automatic preview-state refresh in the dashboard plus safer reload fallback behavior
  • 2026-03-22 Added one-click starter presets to the dashboard for common overlay setups
  • 2026-03-22 Collapsed deeper sidebar sections by default while keeping search fully discoverable
  • 2026-03-22 Added a dashboard workspace-status card with validation summary, save state, runtime details, and quick actions
  • 2026-03-22 Made studio preview reload restart safely and changed the sidebar to auto-collapse other sections when opening a new one
  • 2026-03-22 Forced preview visibility when saved configs use no_display and stopped pinning the scene selector after previews stop
  • 2026-03-22 Added screen-clamped preview docking, dashboard controls for preview window size, and a shared custom shell for the main deep settings pages
  • 2026-03-22 Fixed the validation-save deadlock, moved layer conflicts inline, added profile deletion, and made dashboard preview controls safer to scroll/use
  • 2026-03-22 Moved raw editor and integrations onto the custom shell and fixed Steam launch-option generation to follow the selected method
  • 2026-03-23 Gave right-aligned previews extra width and stopped side-docking them to reduce off-screen HUD placement failures
  • 2026-03-23 Added explicit empty states for filtered conflicts/integration detection and surfaced profile-folder open failures instead of failing silently
  • 2026-03-23 Extracted shared color conversion helpers and deduplicated the saved-snapshot restore path in window actions
  • 2026-03-23 Moved config-layer discovery off the synchronous shell path and hardened parser round-trips against duplicate keys and accidental value whitespace
  • 2026-03-23 Rebuilt visible pages from shared state on navigation, refreshed live preview from non-dashboard editors, widened right-aligned horizontal preview safety margins, narrowed default shell sizing, and made stale .mangotune.bak paths non-fatal during save
  • 2026-03-23 Normalized legacy flag values across preview/profile/reload paths and refreshed the visible page + preview after revert/reload/profile restore so stale horizontal_stretch=0-style states dont linger
  • 2026-03-23 Added a preview-only bounded width fallback for horizontal auto-layout previews, renamed/moved the sidebar layer viewer section, softened config-bar labels, narrowed the default shell width again, and simplified raw-editor guidance
  • 2026-03-23 Preserved scroll position during visible-page rebuilds, removed the extra dashboard guidance card, tightened dashboard spacing, and narrowed sidebar/window defaults further
  • 2026-03-23 Fixed disabled horizontal_stretch serialization, made preview reload use the current computed width, reset horizontal_stretch in dashboard presets, and stopped dashboard polling timers from leaking across page rebuilds
  • 2026-03-24 Corrected the MangoHud behavior references against the deep-research report and local upstream source, including preset, benchmark_percentiles, inherit, and keybind/default caveats
  • 2026-03-24 Aligned MangoTune's live schema and validation with the corrected MangoHud reference by making offsets unsigned, broadening keybind parsing, warning on legacy benchmark_percentiles, treating preset as a list-valued upstream option, and adding the missing practical upstream options that belong in the GUI
  • 2026-03-24 Surfaced the last documented upstream options in the UI too, including runtime/Gamescope sections on the Performance page, secondary typography sizing, and an advanced Blacklist subsection for special directives like help and inherit
  • 2026-03-24 Stopped text-entry fields from reloading the preview on every keystroke, added a saveable-config gate before preview reloads, and tightened threshold-color dependencies so incomplete threshold setups do not immediately destabilize the preview
  • 2026-03-23 Added preview-only right-offset compensation for horizontal right-aligned layouts after stretch-off was confirmed fixed but right alignment still failed
  • 2026-03-23 Added Studio-only post-launch preview-size calibration so right-aligned horizontal HUD placement can use the actual scaled Studio window width instead of only the requested logical width
  • 2026-03-24 Expanded the MangoHud source-truth docs with explicit full exclusions, offset parsing quirks, and isolated-X capture limitations after direct-lab verification on arch.lan
  • 2026-03-24 Switched shared control rows, colors, and keybindings to friendly display titles sourced from the verified MangoHud reference instead of raw key-shaped labels
  • 2026-03-24 Added polished UI-facing summaries for common MangoHud options so shared rows and keybinding descriptions read like product copy instead of schema text
  • 2026-03-24 Simplified the shell save flow by making the header the single primary save surface, softening layer-bar wording, and always starting the app on the dashboard
  • 2026-03-24 Moved FPS/GPU/CPU color editors out of the telemetry pages and consolidated them under Colors and Theme so metric pages focus on what is shown while appearance pages own styling
  • 2026-03-24 Regrouped Colors and Theme into clearer sections for core palette, hardware labels, signal thresholds, and extra integrations/status colors
  • 2026-03-25 Replaced the placeholder hotkey toggler with a real modal keybind editor, guarded color-entry/swatch synchronization to avoid recursive GTK edit loops, and corrected GPU/CPU threshold-color dependencies to point at gpu_stats / cpu_stats
  • 2026-03-25 Switched ordinary Studio preview edits from restart-driven reloads to debounced temp-config rewrites so MangoHud can reparse changes in place without relaunching the window
  • 2026-03-25 Changed dashboard profile restore and presets to use the same Studio live-apply path instead of forcing a preview restart, removed the redundant preview-renderer label from the dashboard card, and added save-menu actions for reset-to-defaults and restore-latest-safety-backup
  • 2026-03-26 Removed the unreliable preview-docking preference from the UI, switched dashboard offset controls back to MangoHuds real unsigned offset semantics, normalized legacy negative offsets on load, and started writing explicit =0 for upstream default-on flags like frametime and frame_timing
  • 2026-03-24 Simplified preview-only right-anchor emulation by dropping fake vertical offsets and adding a small no-margin right-edge safety for horizontal right-aligned layouts
  • 2026-03-24 Tried preserving native MangoHud right-side positions directly, but reverted that change after it made horizontal previews disappear again; preview-side right-anchor emulation remains the last usable path while MangoHud-native behavior is being investigated separately
  • 2026-03-24 Added a direct MangoHud position lab and matrix runner so margin/compact/right-anchor behavior can be validated outside MangoTune on a real X11 session, including an isolated-Xorg workflow for arch.lan