BaseAdmin: an admin system that you can base stuff off of

Not to be confused with “Basic Admin”. This one has slightly cleaner source code.

You might be seeing this post due to a new version update log. To view the release notes for the newest version, scroll down.

What is BaseAdmin?

BaseAdmin is an admin system that is designed to be based off of to the user’s liking. Unlike most other admin systems, BaseAdmin actually has readable source code if you know what you’re looking for.

BaseAdmin has been in development since May 31st of 2020 and publicly released in early 2021, named AdminSuite. The first version released to the public was v0.97, but had very messy source code. The first version that had BasicCommands (commands module) was v1.30.

Why should I prefer this over a more popular admin system?

BaseAdmin is not for everybody. I designed BaseAdmin to be easily customizable, and it is meant to have plugins (for advanced users, external features are also an option).

But I also considered the aspect of beginners and how they want everything to just work. That’s why I made BaseAdmin give details and steps to beginners on how to use it.

Is it secure?

Well, I’ll be specific. BaseAdmin places a folder in a Player when joined. This is why BaseAdmin is supposed to be kept in a secure environment. There should be no remote events that blindly set a value to a custom value, as exploiters might easily be able to get admin. EDIT: This was patched in v1.67. More security patches were added in the 1.7 series of BaseAdmin.

What are the features of BaseAdmin compared to other admin systems?

BaseAdmin has many features. One of them is the ‘restrict’ command, which allows you to restrict a command to a certain rank if a player on that rank is abusing the command. The best part about this is that you don’t have to fork BaseAdmin and it will continue to update.

Another feature is the ability to have custom rank names (called rankTranslations, because it translates the rank from a number to a word) without forking.

Last but not least, the best feature is basing stuff off of BaseAdmin. You can choose if you want a BindableFunction placed in your game that is responsible for running commands as the server user. Then, you can have automations that you can script yourself that automatically execute BaseAdmin commands or plugins.

Group admin would’ve been listed here, but that was a big deal when it came out. It’s now average for admin systems to have group admin. Plus, there’s literally a tag option “annoyinggroupadmin” so…

That’s great, how do I get it?

You can get the loader here: Base Admin Loader - Roblox

You can get the latest MainModule here: Base Admin MainModule - Roblox
(Name has not yet been updated to BaseAdmin, the title to the model is still using the previous name, AdminSuite)

And, if you want even more customizability, consider AdminSuite v1.37. You can get that here:
AdminSuite v1.37.rbxm (514.7 KB)
but it will not be as stable or secure (plugins have been updated in between releases, so they will not be compatible without conversion).


If you have any documentation questions or feedback, please ask in the replies. Requesting features is appreciated since that’s my current limitation to developing it at the moment.


Could you include pictures of the in-game GUI (if applicable)?


No problem! This is some of the UI of BaseAdmin:

Commands list:

Old UI:


“Immersive UI” is being worked on at the moment, so you will see that soon.
Most of the current UI looks the same, so there’s not much else to it.

Edit 2023: immersive UI is still not used and these images are outdated. For the most part, the layout is the same but they have different themes. Use the ;theme command.


Could you upload the source to Github?


I’m not sure how yet. If there’s a tutorial you could send me that would be great.

  1. Sign in to your account and press the plus button and go to New repository
    and write all the information requested

  2. Press Add file

  3. Above write the name that you will place and at the end write .lua

  4. Place the script

Since there are several, write them in a text file and save it with its name, at the end write .lua, then go to GitHub and press Upload files and upload the files


Seems like a lot of work to keep up to date all the time and synced with Roblox. What exactly are the benefits of doing so, other than branching?


Hey! I hear it’s been in development for a while, I would like some photos to see what it looks like!


I sent some photos of the UI in a previous post; I recommend you check that out!



You might wanna port over all this code onto a module script buddy. And, why should we use your admin command over other admin commands?

I believe other popular admin systems also provide this.


This is AdminSuiteForDevelopers, which is out of date (it was the version before I put it into a modulescript). I consider you upgrade to BaseAdmin, I provided a link to it in the post.


One possible issue:
BaseAdmin places values into the player for setting admin ranks for backwards compatibility reasons and to easily set ranks.

However, if you have one of these, it can be exploited:
event.OnServerEvent:Connect(function(_, s, v)s.Value=v end)
If you have one or more instances of something like that in your code, replace them with this:

event.OnServerEvent:Connect(function(plr, s, v)
    if s.Parent == plr:FindFirstChild("BaseAdminPlayerData") then
        --You can remove the below line, but it is recommended not to do so.
        plr:Kick("Exploit detected")
        s.Value = v
    --If you have any more code, place it here.

It is highly recommended that developers look into this until an alternative is provided, since BaseAdmin currently only supports real-time rank changing, which cannot be disabled.


Yes, they do in fact.
Good examples are Adonis and Cmdr.


Version 1.67 is now released.

This is now fixed, anyone worried about security now has nothing to worry about.

  • When opening UI in first person, keybinds will be provided to close the UI. If this breaks anything, please let me know.

  • Loading other versions is now possible with the ‘loadversion’ command. You can view the versions available with the ‘versions’ command.

  • BasicCommands now contains a new function called getCommand. This function allows the retrieval of commands with a name, and will return an error message when not found. A few other internal functions were added onto this, such as getCommandRank and getFastCommandRank. The difference between those two is getFastCommandRank does not check for custom restrictions set on a command, while getCommandRank does.

  • Fixed a bug that prevented the ‘buyvip’ command from prompting purchases of gamepasses.
  • Setting ranks can no longer be done directly from the server without access to the processAdminSavedData service.

  • Commands list gives an option to show commands for a certain rank, and now by default only shows commands for the current player’s rank.

  • Features will now have environment variables of the MainModule passed to them through the 2nd parameter. This affects both external and non-external Features, as a minor change. Current external features will continue to work normally.

  • Minor text changes for various internal messages.


For those who need to set ranks outside of BaseAdmin, and are prevented by the security update

“AdminRank” and “SetRank”, present in “BaseAdminPlayerData”, can no longer be changed directly. To change these values, you must use the syntax:"processAdminSavedData", Player, "setRank", type (dependency name of BaseAdminPlayerData), value).

To retrieve the ModulesHandler from a plugin
local data = {}

local env = {}

local ModulesHandler = 'e'
data.disabled = false --turn off if you want to test out a plugin.

data.plugin = {function(Player, arg)
	for i, obj in pairs(env) do
		print(i, obj)
end, 'desc', '<arg>', 2}

function init()
	env = getfenv(2)
	ModulesHandler = getfenv(3).ModulesHandler
	return data

return init
To retrieve the ModulesHandler from an external or non-external feature

This is now possible with the latest template.

return function(set, env)
	--init function
	local modulesHandler = env.ModulesHandler
	if not modulesHandler then warn("No ModulesHandler!") end
	local s,e = pcall(function()
		--Place your code here
	if not s then
		--Available options are Retry and Abort.
		--Return: StatusCode, pcallStatus, pcallError
		--if the status code is Abort, pcallStatus can also be used as a string to identify an error code.
		--example: return "Abort", "Unknown error"
		--or, the Abort status can be used normally
		--example: return "Abort", false, "Parse error"
		return "Retry", s, e

If you need more information, I would be happy to help you!

Loader updates:
The loader will receive a minor version increment, from 0.78 to 0.781, as nothing has changed in the settings module yet. The latest version has an updated “extFeatures” example module which contains the 2nd “env” parameter.

Known Issues:

  • When ranking a user in-game, the exploit protection might prevent instant ranking to accomplish. A workaround is to have the target player rejoin the game to become ranked. This issue is fixed as of v1.68b1.

There’s a chance v1.68 will be rolling out today! Stay tuned!

The update will include the ragdoll commands working again. I’ll provide more info in the update post.

1 Like

Version 1.68 is now released.

  • Ragdoll v5.2 and v6.1 have been implemented in BaseAdmin.

  • The new service addition, “CorePrompt”, will use the :SetCore function to either prompt players or send a core notification. If you need information and syntax, please reply.

  • When ranking a user in game, their new rank will be denied. The cause of this was the exploit protection implemented in v1.67; v1.68 is now updated to apply this fix.
  • BasicCommands now uses the CorePrompt service for notifications when a dependency of a command is restricted.

  • Internal ragdoll command changes.


Wait, Ragdoll 5.x used glue, how is it back!?

A little thing I called “ReplaceGlueWithAttachments” fixes this. It is coded very badly, but the Ragdoll 5 system is needed for R6 characters as the Ragdoll 6 system’s R6 functionality was limited when Glue was obsoleted. This caused Ragdoll 6 to become unstable when it came to R6, and it also did not work with RagdollCombatTools, which only worked with Ragdoll 5.

Ragdoll 5.2 and 6.1 are now included in BaseAdmin. Ragdoll 5 has very limited support with R15, but it does work.

To ragdoll, use “;ragdoll me” and then “;forceragdoll me true”. To use combat tools, use “;combat” and then “;clone”. Now, you can test out the system (combat tool animations do not play outside of the places owned by my account).

Loader updates:
A new update with a minor version increment brings the loader to v0.782, with the new addition of the setting “PromptToViewErrors”. When enabled, this setting will notify users with the “Owner” rank about errors and ask if they want to view them, using the CorePrompt service.

1 Like

Version 1.69 is now released.

  • None
  • When using BaseAdmin without DataStoreService working, BaseAdmin would not add you as an admin and load the legacy version via loader error. This was a problem with a previous update changing the way BaseAdmin retrieves admin metadata, but this is now fixed. If you still experience this issue, please reply to this post.
  • The noclip command now has better functionality.

  • The plane command now can load the backup plane.

  • The car command behaves differently when spawning a backup car.

  • Due to the ChatService partial deprecation warning, BasicCommands now moderates text using TextService instead of Chat.


I noticed that SafeServer doesn't load in game, was this fixed yet?

I have noticed this bug for a while now and I’m not quite able to reproduce it correctly. SafeServer loads in the development place 100% of the time and I cannot reproduce the issue. When enabling the SafeServer feature, if you experience the issue, I’ll do my best to fix this issue in the next release.

This release was planned to go live later when more features were added, but due to the DataStore bug I decided to release it early. That’s why there’s no additions.

Loader updates:
The loader has not been changed.

1 Like

Version 1.70 is now released.

  • GuiService is a new service used to create GUIs.

  • userDataService is a new service to manage user data. For more information, use the services command.

  • Gui themes have been added for more customizability. Use the theme command for more info.

  • Setting user data manually is possible through the setuserdata command. It will be available to nonadmins, so make your secure data saved in tables!

  • The guihelpv2 command can be used to test out the new theme service.


No bugs were found with this release.

  • ModulesHandler now supports returning multiple arguments. This was a required change due to the addition of GuiService.

  • addAdmin is now obsolete. To use it, you must use env.var.addAdmin. This was an unnecessary argument that was taking up memory and it wasn’t used.


What if a user wants to delete their BaseAdmin data?

This version of BaseAdmin is meant to introduce new features. Do not fork the module.

This feature will be added in the next release of BaseAdmin, using the all new ImmersiveGui to create a wizard to do so.

Loader updates:
The loader has not been changed.

1 Like

Version 1.71 is now released. This update comes with some security patches and new features.

  • BaseAdmin is now compatible with custom chat systems such as SocialChat. More information can be found in the Details section of the release notes.

  • Users can now delete their user data with the ‘deleteuserdata’ command. Keep in mind that this will not delete their name from the admins list or the admin metadata.

  • Fixed a vulnerability for the command bar’s remote event. BaseAdmin will notify you if anyone tries to exploit yours.
  • Restricted access to env.t commands. Use env.useCommand instead.
  • Fixed an issue where the notify sound would play when in Run mode.
  • Changed some strings for kick and warning messages.


Using BaseAdmin with a custom chat system

You can use BaseAdmin with a custom chat system like SocialChat. Here is a code example:

--Place in the Settings Module.
config.getCustomMessageEvent = function(plr)
	return game:GetService("ReplicatedStorage"):WaitForChild("SocialChat",5).Remotes.ChatReplicate.OnServerEvent
end--If your game uses a custom chat system, place a function here that returns an event when the player chatted.

The function basically returns a RBXScriptSignal connection value. The arguments passed should be player : Instance, message : string

This was tested, and it worked. If you are unable to get the example working, please reply to this post.

Loader updates:
The loader has been updated, but the version number won’t change, since none of the text in the loader was actually modified. You can now specify an “event getter” function for custom chat systems, using config.getCustomMessageEvent.


Version 1.72 is now released. This update comes with some security patches, bug fixes, and new features.

  • The addition of PageViewer allows viewing pages with links inside of BaseAdmin. It is currently in beta and there’s several known issues with the system.

  • getConfig is an internal function that allows retrieving configuration data. If the path specified does not exist, it will use a default value. This function generally clears clutter in the scripts that use the settings module.

  • New theme: “BaseAdminLight” for light theme users. This will not replace the default theme.

  • “testerror” command is for testing the internal error handler.

  • “CommandTasks”

  • The new “tasks” command allows you to view commands currently being run by admins, and a history of them.

  • The new “docs” command allows you to view some documentation using PageViewer.

  • Fixed a vulnerability where a user could exploit the search box. This is referred to as Security Patch #8.

  • Memory leak fix for when a player leaves. For the most part this has been patched in v1.32, but it is now disconnecting all events. This fix should not change any functionality.

  • Fixed a theme issue with the SSecurity theme.

  • Removed the close button from the AdminSuite themes.

  • Fixed an issue where text color would not display properly for lighter themed backgrounds.

  • The release note print is now an init module (like it should be)

  • BaseAdmin themes will now truncate text in the title bar if it is too long.

  • Changed some strings for kick and warning messages.

  • Changed some wait statements to task.wait.


Nothing at the moment. Everything should be self-explanitory.

Loader updates:
The loader has been updated internally but no public update releases are currently available for this update.

As always, please report any issues you encounter due to this update.