Settings Menu
Overview
A premium drop-in settings menu for any Roblox game. Center modal panel with sidebar tabs, four widget types (Toggle / Slider / Dropdown / Button), per-player DataStore-backed saves, configurable sound FX on every interaction, and pure scale-based UI that works on phones, tablets, desktops, and consoles.
Ships with 17 thoughtfully chosen starter settings across Audio / Graphics / Gameplay / Accessibility — and 10 of them auto-wire to Roblox systems out of the box (master volume, graphics quality, FPS counter, UI scale, shadows, particles, mute-when-unfocused, reduce-motion, high-contrast, reset-all). The other 7 are intentionally data-only because they're game-specific (music/sfx volume, tutorial flow, camera sensitivity, etc.) — wire them to your game in 3 lines via the OnChange hook.
Every UI element is enable/disable-able via config flags. Every text string and glyph is configurable. Every color is themeable through a single AccentColor.
Open source. Plain Luau. No obfuscation. Edit any file freely.
Features
Premium Modal UI
- Center modal with dimmed backdrop, smooth open/close tweens, click-outside to close
- Sidebar + content layout with category tabs and active state highlighting
- Floating cog button always reachable; auto-relocates on mobile to avoid Roblox's jump button
- Configurable hotkey + gamepad shortcut (defaults to nil — pick your own)
- Pure scale-based UI — zero hard offsets in layout, works on every aspect ratio
- Mobile breakpoint auto-grows the panel to fill small screens
- Single AccentColor drives the entire UI (slider fill, toggle ON, active tab, button highlights)
- Single text-only navigation by default — clean and crisp; add icons if you want
Four Widget Types
- Toggle — animated boolean on/off with smooth knob slide
- Slider — Min/Max/Step with optional suffix (%, x, etc.) and live value label
- Dropdown — string choice from a fixed options list with hover highlights
- Button — built-in
"ResetAll"action, or wire your own via_G.CoreShunSettings_OnAction
17 Starter Settings — 10 auto-wired
Auto-wired (work out of the box):
master_volume— scales every Sound in workspace by 0..100, catches new sounds at runtimemute_when_unfocused— silences audio when the game window loses focusgraphics_quality— sets Roblox QualityLevel (Auto / Low / Med / High / Ultra)particles_enabled— toggles all ParticleEmitter / Trail / Beam in workspaceshadows_enabled— Lighting.GlobalShadowsfps_counter— on-screen FPS displayui_scale— applies a UIScale to PlayerGuireduce_motion— disables menu's own animationshigh_contrast— boosts every UIStroke in the menureset_all— restores all settings to defaults
Data-only (read via OnChange — game-specific):
music_volume— apply to your music SoundGroupsfx_volume— apply to your SFX SoundGroupshow_tutorial/show_tips— gate your tutorial / tips flowcamera_sensitivity— multiply your camera inputscreen_shake— gate your shake callscolorblind_mode— swap your UI palette
DataStore Persistence
- Per-player saves — each player's settings persist across servers and sessions
- Server-side sanitization — bad values are clamped, snapped, or rejected
- Race-safe — pcall-wrapped DataStore calls, BindToClose flush on shutdown
- Rate-limited writes (configurable cap) — sliders stay smooth without spamming the store
- Graceful fallback — if API access is off, falls back to in-memory mode (settings still work, just don't persist)
- Configurable DataStore name — change in Config.General.DataStoreName
Configurable Sound FX
Every interaction can play a sound — each fully configurable:
- Click — any button press
- Hover — cursor enters a button (set Volume = 0 to mute)
- Open / Close — menu panel transitions
- ToggleOn / ToggleOff — flip animations
- Slider — slider release
- Dropdown — selection change
Id, Volume, and Pitch. Replace with your own asset IDs or set SFX.Enabled = false to mute everything.Every UI Element is Toggleable
Hide what you don't need. Disable any flag in
Config.UI and the rest adapts:ShowBackdrop— dim layer behind the panelShowTitleBar— title row at the topShowTitleDivider— line under the titleShowCloseButton— × buttonShowSidebar— category tabs (false = single combined page)ShowDescriptions— subtext under each settingShowPanelGradient/ShowPanelStroke— visual flourishesHoverEffects— disable for max performanceOpenCloseAnimation— disable for instant open/close- Per-setting Hidden flag — hide individual settings without deleting them
Buyer Integration (
_G Hooks)Read settings from anywhere:
_G.CoreShunSettings_Get(id)— returns the live value_G.CoreShunSettings_GetAll()— table of every setting_G.CoreShunSettings_Set(id, value)— programmatic write (saves to DataStore)_G.CoreShunSettings_ResetAll()— restore all defaults_G.CoreShunSettings_Open() / Close() / Toggle()— menu control
Define your own functions to receive events:
_G.CoreShunSettings_OnChange(id, value)— fires on every value change_G.CoreShunSettings_OnOpen()— menu opened_G.CoreShunSettings_OnClose()— menu closed_G.CoreShunSettings_OnReset()— Reset All pressed_G.CoreShunSettings_OnAction(id, action)— custom button pressed
Cross-Platform
- Desktop — mouse hover, click drag for sliders, optional keyboard hotkey
- Mobile — touch-friendly buttons, panel auto-grows below 800px wide, cog button auto-relocates to right-edge middle to avoid Roblox's jump button
- Console — D-pad navigable via Roblox's built-in GuiService, optional gamepad hotkey
What's Included
- SettingsConfig.lua — single config ModuleScript (the only file you edit)
- SettingsServer.lua — DataStore + remotes (server)
- SettingsClient.lua — modal UI + widgets + sound FX (client)
- Installer.lua — one-click command bar installer
- Manual.pdf — comprehensive 10-section guide with full settings table
- Cheatsheet.pdf — visual one-page quick-ref
- README.txt — quick reference
- Rojo project (default.project.json + ship.project.json) for active development
Easy Installation
- Drag
SettingsMenu.rbxmxinto your place - Open the Studio Command Bar
- Run
require(workspace.CoreShunSettingsMenu.Installer) - Press F5 — a floating cog appears
- Click it — tweak settings, see them save automatically
Or use the included Rojo project for live development. Compatible with Rojo 7.x.
Frequently Asked
How do I add my own settings?
Open SettingsConfig in ReplicatedStorage. Append a new entry to
Config.Settings with an Id, Category, Type, and Default. Save the file. The setting appears in the menu next playtest.How do I read a setting from my own scripts?
Call
_G.CoreShunSettings_Get("setting_id") from any LocalScript. Returns the live value.How do I react to changes?
Define
_G.CoreShunSettings_OnChange = function(id, value) ... end in any LocalScript. Fires on every value change.Settings reset every time I rejoin?
DataStores only work in proper Studio test mode (F5) or a published place. They're disabled in "edit mode" / "Local Server" mode. The system gracefully falls back to in-memory mode when DataStores are unavailable — settings still work in-session, just don't persist. To enable persistence, publish your place and turn ON API access in Game Settings → Security.
Does it work on mobile and console?
Yes. Pure scale-based UI, mobile breakpoint auto-grows the panel below 800px wide, controller D-pad navigation via Roblox's built-in GuiService. The cog button auto-relocates to the right-edge middle on mobile to avoid clashing with Roblox's jump button.
Can I disable the cog button and use only a hotkey?
Yes. Set
Config.Toggle.ShowButton = false and assign Config.Toggle.Hotkey = Enum.KeyCode.O (or any key).Can I open the menu from my own button?
Yes. Call
_G.CoreShunSettings_Open() from any LocalScript.Why no save / cancel buttons?
Modern UX — every change saves instantly. Avoids the "I changed something then forgot to hit save" frustration. The "Reset All" button is built-in as an example of how to add custom buttons.
Why are some settings "data-only"?
Some settings (music_volume, camera_sensitivity, colorblind_mode, etc.) are inherently game-specific — we'd need to know your game's Sound layout, custom camera scripts, and UI palette to wire them correctly. Instead, we provide them as values you read via
_G.CoreShunSettings_OnChange and apply yourself in 1-3 lines per setting. Manual + cheatsheet have the full table.Will it conflict with my existing settings system?
It uses its own DataStore name and its own Remotes folder. As long as no other script writes to the same DataStore name, you're fine.
Open source?
Fully. Plain Luau, no obfuscation. Edit any file to customize.
More Tools by coreshun
- In-Game Systems — Music Player (premium), Simple Music Player, Daily Rewards, Loading Screen, Advanced Chat System, Toast, Admin Dashboard, Anti-Exploit, AutoRejoin, Codes Redemption
- Studio Plugins — Color Picker, UI Wireframe, Gamepass Manager, TODO Tracker (free)
- Bundles — up to 45% off
Support
Discord: discord.com/invite/hdB5tadkk8
$4.99 · 17 settings · 10 auto-wired · DataStore-backed · Cross-platform · Open source

v1.0 set graphics quality through settings().Rendering.QualityLevel, which is a Studio/plugin-only property; a game LocalScript can't write it, so Roblox logged that "write access restricted" message and the quality change didn't reliably apply.
v1.1 is now live. It uses the runtime-safe UserGameSettings.SavedQualityLevel API instead. Re-download the update and the error should be gone. Sorry for the hassle, and thanks for the review!
If you got any further issues, feel free to join Discord and we can discuss about it :)