8 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

ServiceProvider

Inherits from: Instance → Object

A ServiceProvider is an abstract base class that manages a registry of singleton service instances. The DataModel (accessible in Lua as game) is the primary ServiceProvider in an experience. Services are created lazily the first time they are requested via ServiceProvider:GetService() and remain available for the lifetime of the DataModel.

You do not create ServiceProvider instances directly; instead you interact with its members through the DataModel.

Inherits from: Instance

Descendants: DataModel, GenericSettings

Memory category: Instances

Tags: NotCreatable, NotBrowsable

Methods

NameType / ReturnsDescription
ServiceProvider:FindServiceInstanceReturns the service specified by the given className if it's already created, errors for an invalid name.
ServiceProvider:GetServiceInstanceReturns the service with the requested class name, creating it if it does not exist.
ServiceProvider:getServiceInstance
ServiceProvider:serviceInstance

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

ServiceProvider:FindService

Returns the service with the given class name only if it has already been created. Unlike ServiceProvider:GetService(), this method does not create the service when it does not yet exist; it returns nil instead. If className is not a valid service name, the method throws an error.

This method is thread-safe and can be called from any thread context. It is useful when you need to check whether a service is present without triggering its initialization, for example during cleanup or conditional logic that should not force service creation.

Parameters

NameTypeDefaultDescription
classNamestringThe class name of the service to find.

Returns

TypeDescription
InstanceThe service instance if it has already been created, or nil if the service does not yet exist.
FieldValue
securityNone
thread safetySafe

Code samples: View on Creator Hub (ServiceProvider-FindService1).

ServiceProvider:GetService

Returns a service with the class name requested. When called with the name of a service (such as Debris) it will return the instance of that service. If the service does not yet exist it will be created and the new service is returned. This is the only way to create some services, and can also be used for services that have unusual names, e.g. RunService's name is "Run Service".

Note:

Parameters

NameTypeDefaultDescription
classNamestringThe class name of the requested service.

Returns

TypeDescription
InstanceAn instance of the requested service.
FieldValue
securityNone
thread safetyUnsafe

Code samples: View on Creator Hub (ServiceProvider-GetService1).

ServiceProvider:getService

Deprecated. This deprecated function is a variant of ServiceProvider:GetService() which should be used instead.

Parameters

NameTypeDefaultDescription
classNamestring

Returns

TypeDescription
Instance
FieldValue
tags["Deprecated"]
securityNone
thread safetyUnsafe

ServiceProvider:service

Deprecated. This item has been superseded by ServiceProvider:GetService() which should be used in all new work.

Parameters

NameTypeDefaultDescription
classNamestring

Returns

TypeDescription
Instance
FieldValue
tags["Deprecated"]
securityNone
thread safetyUnsafe

Events

NameType / ReturnsDescription
ServiceProvider.CloseFires when the current place is exited.
ServiceProvider.ServiceAddedFired when a service is created.
ServiceProvider.ServiceRemovingFired when a service is about to be removed.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.

ServiceProvider.Close

Fires when the game instance is shutting down, immediately before services and instances are torn down. On the server this occurs when the last player leaves or the server is closed; on the client it fires when the player leaves the experience.

Connect to this event to perform final cleanup such as saving player data with DataStoreService. Handlers run synchronously — the engine waits for all connected callbacks to return before proceeding with shutdown.

FieldValue
securityNone

Code samples: View on Creator Hub (ServiceProvider-Close1).

ServiceProvider.ServiceAdded

Fires after a service is added to the DataModel. The service parameter is the Instance of the newly added service. Because services are created lazily (the first time ServiceProvider:GetService() is called for them), this event lets you react to a service becoming available without polling for it.

Parameters

NameTypeDefaultDescription
serviceInstanceThe instance of the service that was added.
FieldValue
securityNone

ServiceProvider.ServiceRemoving

Fires just before a service is removed from the DataModel. The service parameter is the Instance that is about to be removed. This event fires during DataModel teardown, giving listeners a chance to disconnect from the service or release references before the service is destroyed.

Parameters

NameTypeDefaultDescription
serviceInstanceThe Instance of the service that is about to be removed.
FieldValue
securityNone

Properties

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring