Core — Changelog
1.7.0 — 2026-09-15
Added
- Range Slider (Int/Float) widgets now support the same custom marks and soft magnetic snapping as Slider — each thumb pulls onto its own nearest mark and confirms with its own haptic independently, so one thumb can sit snapped to a mark while the other drags freely at the same time. See WidgetsBook — Slider: Marks & Magnetic Snap
- A built-in way to read, change, and clear the game's own saved
PlayerPrefsvalues, with optional encryption for text values — for use by other FludeX services and modules. See PlayerPrefs Access- It also reports whenever a value changes through it, so a live view of those values can refresh itself instead of re-checking.
Fixed
- Slider and Range Slider widgets with marks enabled and a fine step relative to their range no longer silently truncate their tick marks partway across the track — the underlying AppUI slider control caps auto-generated marks at 32, which a small step on a wide range could easily exceed with no indication anything was wrong. FludeX now generates a safe, evenly-spaced fallback instead, with a console warning in the Editor and development builds explaining what happened — for Slider, the warning also notes that passing explicit marks avoids the fallback entirely
- Range Slider thumbs could get permanently stuck together when dragged onto the same value, making it impossible to pull them apart again — now fixed.
- A disabled button could show no background at all, making it look like floating text instead of a button — it now matches the other disabled controls around it.
- Buttons with a simple action and no result to report (like Reset Settings) weren't triggering haptic feedback on tap — they now feel the same as any other button.
- Confirmation dialogs were silent when they appeared and when Cancel was pressed — both now give haptic feedback too; confirming already did.
- A stability pass from an internal code audit: removing a page from a WidgetsBook at runtime no longer leaves the tab bar highlighting the wrong tab or landing on the wrong page afterward; Slider dragging is smoother during sustained movement; startup is more resilient to a malformed settings file or an unexpected type encountered while discovering modules; and removing widgets or pages no longer leaves parts of them behind in memory.
1.6.0 — 2026-09-01
Added
- Buttons can now show a confirm/cancel dialog before running their action (
ButtonConfirmationConfig), styled to match FludeX's own visual style — Tray-style border radius, colors, typography, and full-width split action buttons — instead of AppUI's defaults - Added a "DANGER ZONE" section to Core Settings — a confirmation-gated "Reset Settings" button that restores all Core settings to their
FludexConfigseed values, or FludeX's built-in defaults if nothing was overridden - Settings now persist to a JSON file instead of PlayerPrefs, migrated automatically from existing PlayerPrefs data on first launch — isolates FludeX's settings from the host game's own PlayerPrefs usage, so
PlayerPrefs.DeleteAll()no longer wipes them as a side effect - Stepper widgets now support drag-to-scrub — dragging horizontally on the field or its label scrubs the value directly, with velocity-sensitive sensitivity (slow drags for fine control, fast drags for coarse); a tap without any drag still falls through to normal tap-to-type
- The tap trigger can now be configured live, without touching code — a new "TRIGGER" section in Core Settings opens a dedicated page for its Position, Padding, Radius, and Opacity. Changes persist across restarts and reset along with everything else in Reset Settings. See Triggers — Runtime Configuration
- Slider (Int/Float) widgets can now be given custom marks at arbitrary, non-uniform values, with soft magnetic snapping — dragging near a mark pulls the value onto it and confirms with a haptic, while the rest of the track stays completely free to drag. See WidgetsBook — Slider: Marks & Magnetic Snap
- Selector widgets can now be created without a label, for cases where the surrounding widget's own title already says what it's for. See WidgetsBook
Fixed
- Fixed a rare case where tapping a widget immediately after a fast scroll gesture (e.g. reaching the bottom of a long settings page) wouldn't register
- Slider and Range Slider widgets now correctly respect their configured step under the default restriction policy — previously it was silently ignored (Int variants could land on any whole number, not just multiples of step; Float variants ignored it entirely and dragged fully continuously). If a slider's step was left at a coarse value assuming it had no effect, dragging will now be more quantized than before
- Fixed the Range Slider's Float variant accepting only whole-number step values due to an internal typing bug — sub-1 steps like
0.01now work as expected
1.5.0 — 2026-08-15
Added
- Widgets and sections can now be shown, hidden, enabled, or disabled based on another setting — for example, hiding advanced options until a related toggle is turned on. See Conditional Widgets
- Added a "Disabled" label to the Haptics section in Console Settings when haptics is turned off globally
- Added a "Report an Issue" link to the Core Settings page's About/Links section
- FludeX now renders through Unity 6.5's
PanelRendererautomatically on Unity 6000.5 and later, falling back to the legacyUIDocumenton earlier versions — no configuration needed
Changed
- Refreshed the visual style for disabled and inactive widgets across the whole panel — clearer, more consistent contrast between disabled elements and the controls around them
- Haptics settings are now hidden on Desktop, where haptic feedback isn't available
- Updated the App UI dependency to 2.1.12
1.4.0 — 2026-08-01
Added
ColorPickerwidget — a new WidgetsBook element for picking a color via a swatch that opens AppUI's color picker popover- New Core Settings page — reachable from the panel's settings button — for editing core configuration at runtime instead of only at code time: initial module selection, widget result/exception toasts, notification stack behavior, and haptics. See Core Settings
- Haptic feedback system —
IFludexHapticsServicewith per-domain toggles (Core / Widgets) viaFludexHapticsConfiguration, configured throughFludexConfig.Haptics; wired into Button/QuietButton, Toggle, Selector, Stepper, Insets, Text, Info, ColorPicker, NavigationButton, TextInput, Slider/Range Slider, WidgetsBook tab navigation, and panel chrome. See Haptics IFludexNotificationStackService.TryPush()— pushes a notification and returnstrueonly when it's genuinely new, used to avoid duplicate haptic feedback for repeat alerts
Changed
WidgetsBookPresenter's second constructor argument changed fromIFludexResolvingFactorytoIServiceProvider— existing directnew(...)calls need a one-line update; still constructible directly, no forced DI-factory usage- Adjusted drawer styling — footer redesign, module list refinements
Fixed
- FludeX's UI no longer conflicts with the host game's own UI panels for rendering/interaction order —
PanelSettingssorting order changed from 0 to 10000
1.3.0 — 2026-07-06
Added
- Flexible, fully configurable notification stack
NavigationButtonwidget — pushes a sub-page from any widget page, opening as an overlay on first tap and sliding deeper within it on subsequent taps
Changed
- Widgets' button result/exception toasts (
ButtonResultToast/ButtonExceptionToast) now surface through the new notification stack instead of a raw AppUI Toast - Updated
com.unity.dt.app-uidependency to 2.1.11
Fixed
- Selector widget's dropdown popup now stays open across multiple picks in multi-select mode instead of closing after every selection
- TextInput widget's placeholder text is no longer near-invisible against its background — its color now provides real contrast
1.2.0 — 2026-06-25
Added
IModuleConfiguration<TModule>— typed configuration interface; pass one or more module config objects directly toFludeX.Initialize()Prepare()— new lifecycle phase called afterInitialize()and before the first frame, allowing modules to complete pre-show setupFludexModuleDescriptor.Version— version string exposed on each module descriptor and shown in the module settings panel
1.1.1 — 2026-05-26
Fixed
- Unity built-in debug console is showing automatically on error overlapping the FludeX
1.1.0 — 2026-05-25
Added
ButtonResultstruct and Toast feedback for button actions — success, failure, and unhandled exceptions each surface the appropriate notification- Void button overloads (
Action,Func<Task>) — complete silently with no Toast unless an exception is thrown FludexConfig.Widgets— newWidgetsConfigto control built-in widget behaviors, starting withButtonResultToastandButtonExceptionToastflagsIConfigurableModule— modules can now expose a settings view by implementingGetConfigurationView(); a settings button appears in the app bar and opens a bottom tray with the module's configuration UI
Fixed
- Drawer partially visible on first launch when in closed state
1.0.0 — 2026-05-06
Initial release.
- Panel engine with show / hide / toggle / dispose lifecycle
- Tap trigger with configurable tap count, position, radius, and opacity
- Keyboard trigger with configurable key binding
- Composite trigger for combining multiple triggers
FludexNoTriggerfor manual show/hide integration- WidgetsBook: Info, Text, Toggle, Button, ButtonsGrid, Slider, Range Slider, Stepper, Selector, Text Input widgets with live data binding
- Descriptor-based module discovery from
Resources/FludeX/Modules/ - Reflection-based DI container
- 5 samples: GettingStarted, WidgetsBook, CustomModule, WidgetsShowcase, WidgetElementsShowcase
