Skip to content

Apps

Handles loading Apps, managing AOS Instances, and more.

Apps (parent)

WARNING

Generally you should not be using module properties. Use APIs when possible.

Contains some properties which may be useful for debugging.

luau
{
	ServerAPI = {},
	InvocationAPI = {},
	RunningApps = { App }
}

Apps.InvocationAPI.RichConfig: Types.RichConfig

Returns a RichConfig object. For more information, please refer to the InvocationAPI guide.

luau
Apps.InvocationAPI.RichConfig: {
		AppMeta: {
			Name: string,
			Icon: string,
			Version: string,
			Description: string
		},

		Dependencies: {
			Administer: string,
			SettingsAPI: string,
			AppPlatform: string,

			AdministerModules: {
                {
                    Type: "SERVER" | "CLIENT"
                    Name: string
                }
            },

			IsAdministerVersionRelevant: boolean
		},

		TextCommands: {}, --// Reserved for future use
		State: {}
	}
luau
local RichConfig = InvokeAPI.RichConfig()

RichConfig.AppMeta.Name = "Player Management"
RichConfig.AppMeta.Description = "Manage your game's players from anywhere!"
RichConfig.AppMeta.Icon = require(game.ServerScriptService.Administer.Loader.Core.Icons).users
RichConfig.AppMeta.Copyright = "2024 - 2025 pyxfluff"
RichConfig.AppMeta.Version = "2.0.0"

RichConfig.Dependencies.AppPlatform = "min:2.0.0;max:3.0.0"
RichConfig.Dependencies.Administer = "min:2.0.0;max:3.0.0"
RichConfig.Dependencies.SettingsAPI = "2.0"
RichConfig.Dependencies.AdministerModules = {
    {
        Type = "SERVER",
        Name = "AdminRunner"
    },
    {
        Type = "SERVER",
        Name = "Utilities"
    }
}

RichConfig.ClientFrame = script.PlayerManagement.UI.PlayerManagement
RichConfig.Bootstrap = require(script.PlayerManagement.Main)

App.InvocationAPI.Construct

Compile and executes an Administer app.

luau
InvokeAPI.Construct(Config: RichConfig, MiscData: {...})
luau
InvokeAPI.Construct(RichConfig, a)
luau
{
    false,
    "this app does not support your administer version. please upgrade to the latest version of Administer."
}
luau
{
    true,
    {}
}

App.LoadLocal

Loads an app either from its module ID or local location and gives it access to the InvocationAPI required to execute the app.

luau
App.LoadLocal(
	Path: number | Instance,
	AppMeta: { InstallDate: number, InstallSource: string, AppID: number }
): Types.Response
luau
App.LoadLocal(
	game.ServerScriptService.Administer.LocalApps.PlayerManagement,
	{ 
        InstallDate = os.time(), 
        InstallSource: "AppMarketplace/2.0", 
        AppID: 133017837
    }
): Types.Response
luau
--// This app cannot be loaded as it has failed a test, this is probably due to an outdated Administer version. The server says: {{failure reason}}
nil
luau
{
    true,
    {
        AppID = 133017837,
        BuildTime = 23.138,
        Description = "Test app.",
        InstallSource = "AppMarketplace/2.0",
        InstalledSince = os.time(),
        Copyright = "pyxfluff 2025",
        Version = "2.0.0",
        Icon = "rbxassetid://13234542324",
        Name = "Test App"
    }
}

Apps.Initialize

INFO

You probably should not be using this. It exists for Administer to use internally.

Loads the AppDB and loads marketplace apps. This function must be called in order for Administer to load admins. Because of this, there is a polling limit for how long it is willing to wait for every app will load which can be changed by accessing Var.AppPollingLimit.

luau
App.Initialize()
luau
boolean

App.Uninstall

Uninstalls an app based on its asset ID.

luau
App.Uninstall(AppID: number)
luau
App.Uninstall(83492944)
luau
{
    false,
    "Something went wrong."
}
luau
{
    true,
    "Done!"
}

Apps.GetAll

Gets a list of all apps, depending on the Source

luau
App.GetAll(
    "DataStore_Raw" | "Combined" | "Bootstrapped" | nil
): {boolean, any}
luau
local BootstrappedApps = App.GetAll("Bootstrapped")
local AppsDataStore = App.GetAll("DataStore_Raw")
luau
{
    false,
    "Source must be of value nil | Bootstrapped | DataStore_Raw | Combined"
}
luau
{
    true,
    {...}
}

Apps.Install

Installs an app based on its raw app ID. After it's installed, the app will be executed. In order for the app to be successfully installed, it must not be a duplicate.

AppName parameter exists for displaying in the UI for unauthorized users in the rank creator, it won't impact the Library menu.

luau
App.Install(
    AppID: number,
    InstallContext: string,
    AppName: string
): {boolean, string}
luau
local Result = App.Install(
    133017837,
    "AppMarketplace/2.0",
    "My cool app"
)
luau
{
    false,
    "This app is a duplicate."
}
luau
{
    true,
    "Installation completed!"
}

Apps.ServerAPI.new

Installs an AOS instance and performs checks on it.

The AOS Instance must be online because Administer will attempt to reach /pub/.administer, which should return technical data, specifically {server: "AdministerAppServer"}, which is what Administer uses to verify it is a valid AOS instance. You can see an example of what data it returns here.

luau
App.ServerAPI.new(
    URL: string,
    ActingUser: int
)
luau
App.ServerAPI.new(
    "https://aos-eur-1.admsoftware.org",
    133017837
)
luau
{
    false,
    "Something went wrong, please check the logs."
}
luau
{
    true,
    "Done!"
}

Apps.ServerAPI.GetList

Gets a list of Assets from all installed AOS instances. You may also specify a specific server if you only want results from that.

luau
App.ServerAPI.GetList(
    SpecificServer: string,
    Area: string --// Generally "Themes", "Featured", or "Apps"
):
    {
        [string] = {
            {
                ["Server"] = string,
                ["developer"] =  {
                    ["ID"] = number,
                    ["Name"] = string
                },
                ["downloads"] = number,
                ["id"] = string,
                ["last_update"] = number,
                ["name"] = string,
                ["object_type"] = string,
                ["rating"] = number,
                ["short_desc"] = string,
                ["weighted_score"] = string
            }
        }
    }
luau
local AppList = App.ServerAPI.GetList(nil, "Featured")

for _, App in AppList["https://aos-canary.admsoftware.org"] do
    print(`{App.name}'s ID is {App.id}!`)
end
luau
{
    ["https://aos-canary.admsoftware.org"] = {
        false,
        429
    }
}
luau
{
    ["https://aos-canary.admsoftware.org"] =  {
        [1] = {
            ["Server"] = "https://aos-canary.admsoftware.org",
            ["developer"] = {
                ["ID"] = 133017837,
                ["Name"] = "pyxfluff"
            },
            ["downloads"] = 11,
            ["id"] = "org.admsoftware.Reporter",
            ["last_update"] = 1747539649.39724,
            ["name"] = "2.0 Feedback Assistant",
            ["object_type"] = "app",
            ["rating"] = 1,
            ["short_desc"] = "Quick reporting",
            ["weighted_score"] = 7.5
        }
    },
    ["https://aos-us-2.admsoftware.org"] = {
        ...
    }
}

Apps.ServerAPI.RegisterPrimary

Registers an AOS Node as it's primary. This is generally used for our production servers, but in a multi-node cluster it may be useful.

luau
App.ServerAPI.RegisterPrimary(
    URL: string
)
luau
App.ServerAPI.RegisterPrimary(
    "https://aos-eur-1.admsoftware.org"
)
luau
{
    false,
    "Something went wrong."
}
luau
{
    true,
    "Done!"
}

Apps.ServerAPI.GetServerStatuses

Gets the status of every installed AOS node.

luau
App.ServerAPI.GetServerStatuses()
luau
local Statuses = App.ServerAPI.GetServerStatuses()

for i, Data in Statuses do
    print(`{Data.URL} has code {Data.Code or 200} with ping {Data.PingTime}!`)
end
luau
{
    true,
    {
        {
            URL           = "https://aos-canary.admsoftware.org",
            Name          = "AOS Canary",
            IsDev         = true,
            Uptime        = 83233,
            Banner        = {},
            AOSVers       = "5.3.1",
            PingTime      = 24.12,
            InstalledBy   = 133017837,
            ServerInstall = 173891723128
        }
    }
}

Apps.ServerAPI.UninstallServer

Removes a server from the game's index. Does not unregister as primary on the backend.

luau
App.ServerAPI.UninstallServer(
    ServerURL: string,
    IsStatic: boolean
)
luau
App.ServerAPI.UninstallServer(
    "https://aos-us-3.admsoftware.org"
)
luau
{
    false,
    "This app server does not appear to be installed."
}
luau
{
    true,
    "Done!"
}

Apps.ServerAPI.GetApp

Gets detailed information on a specific app from its server.

luau
App.ServerAPI.GetApp(
    AppServer: string,
    AppID: string
)
luau
local App = App.ServerAPI.GetApp(
    "https://aos-us-3.admsoftware.org",
    "org.admsoftware.Reporter
)

print(App[2].Name)
luau
{
    false,
    418,
    {
        ProcessedMS = 2.342,
        RespMessage = "I'm a Teapot",
        Code = 418
    }
}
luau
{
    true,
    {
        Metadata = {
            AppAPIPreferredVersion = "min:2.0.0;max:3.0.0",
            AppVersion = "1.0",
            AssetType = "app",
            AdministerID = "org.admsoftware.Reporter",
            UpdatedAt = 1747539649.39724
        },

        Developer = {
            Name = "pyxfluff",
            ID = 133017837
        },

        Votes = {
            Likes = 2,
            Dislikes = 0,
            Favorites = 0
        },

        Name = "2.0 Feedback Assistant",
        Title = "Quick Reports",
        Downloads = 11,
        IconID = 114682642420310,
        BlurredIcon = 137730609161214,
        ShortDescription = "Quick reporting",
        LongDescription = "With the 2.0 Feedback Assistant, you can quickly create bug reports and share feedback with the Administer development team.",
        InstallID = 109468956838534,
        Tags = { "in-panel", "bug-reporting" }
    }
}

Apps.ServerAPI.InstallFromServer

Installs an app from it's AOSId2 and server URL.

luau
App.ServerAPI.InstallFromServer(
    ServerURL: string,
    AppID: string
)
luau
App.ServerAPI.InstallFromServer(
    "https://aos-us-1.admsoftware.org",
    "org.admsoftware.player-management.Main"
)
luau
{
    false,
    "Sorry, but this app could not be installed. Server returned error: 400 (You may not install an app twice.)"
}
luau
{
    true,
    "Done!"
}

Apps.ServerAPI.Vote

Allows you to like or dislike an app. 1 = like, 2 = favorite, 0 = dislike. Outputs a RequestAsync raw output.

luau
App.ServerAPI.Vote(
    ServerURL: string,
    AppID: string,
    Vote: number
)
luau
App.ServerAPI.Vote(
    "https://aos-us-3.admsoftware.org",
    "org.admsoftware.player-management.Main",
    1
)

Apps.ServerAPI.GetAOSInstances

Gets currently active official AOS nodes from https://gateway.admsoftware.org and checks their ping.

luau
App.ServerAPI.GetAOSInstances(
    DoStatusChecks: boolean
)
luau
local Instances = App.ServerAPI.GetAOSInstances(true)
luau
{
    {
            name = "Canary"
            region_code = "aos-canary"
            url	= "https://aos-canary.admsoftware.org",
            IsUp = true,
            Ping = 52.421
    }
}

Performs an API RichSearch.

luau
App.ServerAPI.Search(
    ServerURL: string,
    Query: string
)
luau
local Results = App.ServerAPI.Search(
    "https://aos-us-3.admsoftware.org",
    "Panel"
)

print(Results)
luau
{
    false,
    400,
    {
        ProcessedMS = 85.232,
        RespMessage = "No results found.",
        Code = 400
    }
}
luau
{
    true,
    {
        ...
    }
}

Apps.ServerAPI.GetTotals

Returns the total amount of app servers and running apps.

luau
App.ServerAPI.GetTotals()
luau
local Totals = App.ServerAPI.GetTotals()

print(`{Totals.Servers} app server(s) are installed and {Totals.Apps} are running!`)
luau
{
    Servers = 1,
    Apps = 4
}